感觉 JSON 对于低级语言不太友好,尤其是那些对字符串处理能力比较有限的语言。有可能是个重复的轮子,不过我自己没有找到已有的比较好的方案,不过 JSON 的库确实挺全,可以用起来还是多多少少没有高级语言里那么顺手。
所以这个数据格式并没有解决全部问题,但我觉得至少解决了部分问题。
SOON ( Stack Oriented Object Notation )是我参考 JSON 做的轻量级面向堆栈的数据交换格式,面向堆栈意味着它更容易被程序处理,但损失了可读性。
举例子:
有 JSON 字符串[{"key": "value1"}, {"key": "value2"}]
,相对应的 SOON 字符串为"value1" "key" O1 "value2" "key" O1 A2
。
程序处理时将 SOON 字符串先以空格拆分,然后建立一个空栈 stack。
"value1"
入栈"key"
入栈O1
指令表示目前栈顶的数据是一个对象( Object ),对象包含 1 个成员"key"
出栈作为 obj1 中一个成员的 key"value1"
出栈作为 obj1[key]的值"value2" "key" O1
创建了 obj2 并入栈A2
指令表示目前栈顶的数据是一个数组( Array ),数组包含 2 个元素我用 TypeScript 做了实现来验证想法:https://github.com/Sneezry/StackOrientedObjectNotation
Playground: https://output.jsbin.com/kiyojexico
1
jtn007 2017-12-14 18:25:38 +08:00
Mongo 存储貌似是用的 BSON,也是 JSON 的变种
|
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 "}))); ```` |
3
MeteorCat 2017-12-14 19:20:51 +08:00 via Android
可以尝试下 Google Probuf
|
4
xqin 2017-12-14 19:22:18 +08:00
把 O1 改成 O0 parse 之后会得到一个双引号, 原来 的 名字啥 的都没了.
|
5
onion83 2017-12-14 19:26:13 +08:00 1
|
6
jadec0der 2017-12-14 20:03:35 +08:00
有意思,会玩
|
7
liuweisj 2017-12-15 13:32:13 +08:00
你需要 yaml
|
8
fcten 2017-12-15 18:30:09 +08:00
总觉得很熟悉……仔细想了想,这不是后缀表达式么……
|
9
sneezry OP |