我正在使用mochijson2编码一些数据.
但我发现它在字符串上表现得很奇怪.
但我发现它在字符串上表现得很奇怪.
例:
mochijson2:encode(“foo”).
[91,”102″,44,”111″,93]
其中“102”,“111”,“111”是$f,$o,$o编码为字符串
44是逗号,91和93是方形的.
当然,如果我输出这个地方,我会得到字符串“[102,111,111]”,这显然不是我的意思.
如果我试试
mochijson2:encode(<<“foo”>>).
[34,<<“foo”>>,34]
所以我再次获得两个双引号和二进制部分的列表,其中可以通过list_to_binary / 1转换为二进制
这是一个问题 – 为什么它如此不一致.我明白有一个问题是distingushing erlang列表应该被编码为json数组和erlang字符串,它应该被编码为json字符串,但至少它可以输出二进制当我传递它二进制文件?
第二个问题:
看起来像mochijson输出的一切都很好(因为它使用特殊的元组来指定数组{array,…})
mochijson:encode(<<“foo”>>).
“\”foo\””
mochijson2和mochijson有什么区别?性能? Unicode处理?还要别的吗?
谢谢
解决方法
我的猜测是,mochijson的决定是它将二进制文件视为字符串,并将整数列表视为整数列表. (Un?)幸运的是,Erlang中的字符串实际上是一个整数列表.
结果你的“foo”,或者换句话说,你的[102,111]被翻译成代表“[102,111]”的文本.在第二种情况下,您的<<“foo”>>字符串变成“foo”
关于第二个问题,mochijson似乎总是返回一个字符串,而mochijson2返回一个iodata类型. Iodata基本上是字符串,二进制文件和iodatas(实际上是iolists)的递归列表.如果您只打算通过“线路”发送结果,那么将它们嵌套在列表中比将它们转换为扁平字符串更有效.