nbJSON: nano binary JSON
https://zhuanlan.zhihu.com/p/670846500
极简例子放在最前:
"[{ name 张三 age 18 }
{ photoBytes 256(\x00...\xFF) }]"
不使用 冒号: 引号''"" 空白和换行 转义符\
不定义各种长度整型浮点型, 不关心 big/little-endian
只有一种原子,utf8字符串或字节数组 例如:
5(hello)
256(\x00...\xff) 实际占用 3长度+2括号+256=261字节
json 因为盲目抄 c/java, 用转义符描述二进制,占用 400%空间
base64是 133%空间且不能用二进制编辑器可读
本方案直接存二进制,是100%空间
使用长度前缀,避免转义符,前缀也是可读十进制,
括号用于增强可读性,校验纠错
跟JSON一样的数组和关联数组,例如:
[{4(key1)6(value1)4(key2)6(value2)}{5(bytes)3(\x01\x02\x03)}]
相当于json的 [{"key1":"value1", "key2":"value2"}, {"bytes":"\x01\x02\x03"}]
可以在()括号之外加空白, 增强可读性, 例如:
[{ 4(key1)6(value1) 4(key2)6(value2)}
{ 5(bytes)3(\x01\x02\x03) } ]
允许在无需转义时省略长度前缀, 甚至省略长度前缀和括号
[{ key1 value1 key2 value2 }
{ bytes 256(\x00...\xFF) }]
现有的 schemafull 的protobuf,msgpack比较麻烦,
schemaless 的 UBJSON BJdata 半可读, 但数据类型也很复杂,几十种之多, 还要操心 big-enddian 之类的
--
修改:ABCDEFGHJKLM FROM 111.201.28.*
FROM 123.113.97.*