- 主题:处理二进制json的方案
目前想到的最好的方案(跨语言交互,例如 cpp <-> python):
把所有的数据视为 字节数组的数组 用msgpack编码, [0]放消息类型, [1]放json5, [2]以后是二进制数据;
可以很容易手动C++编码解码, python也可以按msgpack的标准来处理; 仅使用 msgpack 的子集, 0xC4-C6 表示二进制串, 0x90-0x9F \xdc \xdd 表示数组;
python代码:
msgpack.loads(b'\x93\xc5\x00\x05login\xc5\x00\x13{user:"a",pass:"b"}\xc5\x00
\x03\x00\x01\x02')
得到 [b'login', b'{user:"a",pass:"b"}', b'\x00\x01\x02']
其他编码方式要么太复杂(python pickle 对 b'' 输出15字节), 要么太大(b*64方案133%)
--
修改:ABCDEFGHJKLM FROM 103.216.43.*
FROM 103.216.43.*
json5 已经很完美了, 没有多余字节, 还能支持注释之类的
各种二进制json完全重新定义一套格式没必要, 只需要解决bytes问题
通过最简洁可读的msgpack包一层就行了, 应该没有比msgpack更简单的
各种二进制json完全重新定义一套格式没必要, (把括号冒号引号逗号换成'类型-长度'前缀并不省空间, 还牺牲了可读性)
json5 加一点 msgpack 子集作为补丁, 成本最低
【 在 iwantfly 的大作中提到: 】
jsonb, cbor?
【 在 ABCDEFGHJKLM 的大作中提到: 】
: 目前想到的最好的方案(跨语言交互,例如 cpp <-> python):
: 把所有的数据视为 字节数组的数组 用msgpack编码, [0]放消息类型, [1]放json5, [2]以后是二进制数据;
: 可以很容易手动C++编码解码, python也可以按msgpack的标准来处理; 仅使用 msgpack 的子集, 0xC4-C6 表示二进制串, 0x90-0x9F \xdc \xdd 表示数组;
: ...................
--
修改:ABCDEFGHJKLM FROM 103.216.43.*
FROM 103.216.43.*
图像,语音,zip, 怎么传
【 在 foliver 的大作中提到: 】
想想json做什么?
最重要用来网络传输交换,传bytes是作死行为。
【 在 ABCDEFGHJKLM 的大作中提到: 】
: json5 已经很完美了, 没有多余字节, 还能支持注释之类的
:
: 各种二进制json完全重新定义一套格式没必要, 只需要解决bytes问题
: ...................
--来自微水木3.5.10
--
修改:ABCDEFGHJKLM FROM 114.253.35.*
FROM 114.253.35.*