V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
sneezry
V2EX  ›  分享创造

面向堆栈的数据交换格式

  •  
  •   sneezry ·
    Sneezry · 2017-12-14 17:48:03 +08:00 · 2399 次点击
    这是一个创建于 2543 天前的主题,其中的信息可能已经有所发展或是发生改变。

    感觉 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 条回复    2017-12-15 18:36:01 +08:00
    jtn007
        1
    jtn007  
       2017-12-14 18:25:38 +08:00
    Mongo 存储貌似是用的 BSON,也是 JSON 的变种
    xqin
        2
    xqin  
       2017-12-14 19:13:14 +08:00
    有 BUG 去修吧...

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


    var soon = new SOON();


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

    ````
    MeteorCat
        3
    MeteorCat  
       2017-12-14 19:20:51 +08:00 via Android
    可以尝试下 Google Probuf
    xqin
        4
    xqin  
       2017-12-14 19:22:18 +08:00
    把 O1 改成 O0 parse 之后会得到一个双引号, 原来 的 名字啥 的都没了.
    onion83
        5
    onion83  
       2017-12-14 19:26:13 +08:00   ❤️ 1
    jadec0der
        6
    jadec0der  
       2017-12-14 20:03:35 +08:00
    有意思,会玩
    liuweisj
        7
    liuweisj  
       2017-12-15 13:32:13 +08:00
    你需要 yaml
    fcten
        8
    fcten  
       2017-12-15 18:30:09 +08:00
    总觉得很熟悉……仔细想了想,这不是后缀表达式么……
    sneezry
        9
    sneezry  
    OP
       2017-12-15 18:36:01 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2596 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:39 · PVG 18:39 · LAX 02:39 · JFK 05:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.