2

使用 Mochijson 解码 JSON 列表会根据列表值产生错误结果。

例如:

Eshell V5.9.1  (abort with ^G)
1> c(mochijson).
{ok,mochijson}
2> mochijson:decode("[]").
{array,[]}
3> mochijson:decode("[100]").
{array,"d"}
4> mochijson:decode("[100,100]").
{array,"dd"}
5> mochijson:decode("[20,20]").       
{array,[20,20]}
6> mochijson:decode("[30,30]").
{array,[30,30]}
7> mochijson:decode("[35,35]").
{array,"##"}
8> mochijson:decode("[\"Hello\",35]").
{array,["Hello",35]}

我的问题是第 3,4 和 7 行将列表项转换为它们的 ascii 等效项,而不是将它们解码为整数。

任何指向不同 JSON 库或解决方法/修复的指针表示赞赏。:-)

4

2 回答 2

1

它们正在被转换为数字,只是 erlang shell 每当显示整数列表时,它会将它们显示为 shell 上的 ASCII 代表。但它们是有效数字。如果您使用 io:format("~w") 将它们打印出来,您将看到这些数字,并且在您的代码中您可以将它们视为整数。

于 2013-08-01T08:23:07.037 回答
1

为了澄清@Khashayar 的评论,Erlang 字符串整数列表。shell 基本上必须根据这些整数的值来猜测是将其显示为字符串还是整数列表。没有标签说它是一个字符串。您可以在 shell 中很容易地向自己证明这一点。

1> [].
[]
2> [100].
"d"

mochijson2 通过使用二进制类型来表示字符串,使这变得更加简单。我强烈推荐使用这个库而不是 mochijson,它更受欢迎。

1> mochijson2:decode("[]").
[]
2> mochijson2:decode("[100]").
"d"
3> mochijson2:decode("[\"hello\"]").
[<<"hello">>]
于 2013-08-01T23:34:54.933 回答