V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
sneezry

面向堆栈的数据交换格式

  •  
  •   sneezry ·
    Sneezry · Dec 14, 2017 · 2799 views
    This topic created in 3057 days ago, the information mentioned may be changed or developed.

    感觉 JSON 对于低级语言不太友好,尤其是那些对字符串处理能力比较有限的语言。有可能是个重复的轮子,不过我自己没有找到已有的比较好的方案,不过 JSON 的库确实挺全,可以用起来还是多多少少没有高级语言里那么顺手。

    所以这个数据格式并没有解决全部问题,但我觉得至少解决了部分问题。

    SOON ( Stack Oriented Object Notation )是我参考 JSON 做的轻量级面向堆栈的数据交换格式,面向堆栈意味着它更容易被程序处理,但损失了可读性。

    举例子:

    有 JSON 字符串[{"key": "value1"}, {"key": "value2"}],相对应的 SOON 字符串为"value1" "key" O1 "value2" "key" O1 A2

    程序处理时将 SOON 字符串先以空格拆分,然后建立一个空栈 stack。

    1. "value1"入栈
    2. "key"入栈
    3. O1指令表示目前栈顶的数据是一个对象( Object ),对象包含 1 个成员
    4. 创建一个空对象 obj
    5. "key"出栈作为 obj1 中一个成员的 key
    6. "value1"出栈作为 obj1[key]的值
    7. obj1 入栈
    8. 类似的,"value2" "key" O1创建了 obj2 并入栈
    9. A2指令表示目前栈顶的数据是一个数组( Array ),数组包含 2 个元素
    10. 创建一个空数组 arr
    11. obj2 出栈,并 unshift 进 arr
    12. obj1 出栈,并 unshift 进 arr 13 arr 入栈 14 返回栈顶数据

    我用 TypeScript 做了实现来验证想法:https://github.com/Sneezry/StackOrientedObjectNotation

    Playground: https://output.jsbin.com/kiyojexico

    9 replies    2017-12-15 18:36:01 +08:00
    jtn007
        1
    jtn007  
       Dec 14, 2017
    Mongo 存储貌似是用的 BSON,也是 JSON 的变种
    O3YwA1ENkb7i35XJ
        2
    O3YwA1ENkb7i35XJ  
       Dec 14, 2017
    有 BUG 去修吧...

    ````
    import {SOON} from './SOON';


    var soon = new SOON();


    console.log(soon.parse(soon.stringify({test:" O1 "})));

    ````
    MeteorCat
        3
    MeteorCat  
       Dec 14, 2017 via Android
    可以尝试下 Google Probuf
    O3YwA1ENkb7i35XJ
        4
    O3YwA1ENkb7i35XJ  
       Dec 14, 2017
    把 O1 改成 O0 parse 之后会得到一个双引号, 原来 的 名字啥 的都没了.
    jadec0der
        6
    jadec0der  
       Dec 14, 2017
    有意思,会玩
    liuweisj
        7
    liuweisj  
       Dec 15, 2017
    你需要 yaml
    fcten
        8
    fcten  
       Dec 15, 2017
    总觉得很熟悉……仔细想了想,这不是后缀表达式么……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5111 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 05:39 · PVG 13:39 · LAX 22:39 · JFK 01:39
    ♥ Do have faith in what you're doing.