mochijson2或mochijson

Ser*_*kiy 7 erlang json mochiweb

我正在使用mochijson2编码一些数据.但我发现它作为列表在字符串上表现得很奇怪.

例:

mochijson2:编码( "foo" 的).

[91, "102",44, "111",44, "111",93]

其中"102","111","111"是$ f,$ o,$ o编码为字符串44是逗号,91和93是方括号.

当然,如果我输出这个地方,我会得到字符串"[102,111,111]",这显然不是我的意思.

如果我试试

mochijson2:编码(<< "富" >>).

[34 << "foo" 的>>,34]

所以我再次得到一个两个双引号和二进制部分的列表,其中可以通过list_to_binary/1转换为二进制

这是一个问题 - 为什么它如此不一致.我知道有一个问题是distingushing erlang list应该被编码为json数组和erlang字符串,它应该被编码为json字符串,但至少可以在我传递二进制文件时输出二进制文件吗?

第二个问题:看起来mochijson输出的一切都很好(因为它使用特殊的元组来指定数组{array,...})

mochijson:编码(<< "富" >>).
"\"富\ ""

mochijson2和mochijson有什么区别?性能?Unicode处理?还要别的吗?

谢谢

Zed*_*Zed 7

我的猜测是mochijson的决定是它将二进制文件视为字符串,并将整数列表视为整数列表.(Un?)幸运的是,Erlang中的字符串实际上是一个整数列表.

因此,您的"富",或者换句话说,你的[102111111]被翻译成代表"[102111111]"文本.在第二种情况下,你的<<"foo">>字符串变为"foo"

关于第二个问题,mochijson似乎总是返回一个字符串,而mochijson2返回一个iodata类型.Iodata基本上是字符串,二进制文件和iodatas(实际上是iolists)的递归列表.如果您只想"通过线路"发送结果,那么将它们嵌套在列表中比将它们转换为扁平字符串更有效.

  • 试试erlang:iolist_to_binary([34,<<"foo">>,34]).34是单个"字符","foo">>是三个字符的长字符串foo(w/o"),而34是另一个". (3认同)
  • @Hynek:不确定你的意思.编码(或翻译)的唯一目的是将无效数据结构转换为有效数据结构. (2认同)