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