使用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库或变通方法/修复程序的指针都表示赞赏。 :-)
答案 0 :(得分:1)
它们被翻译成数字,只是erlang shell只要显示一个整数列表,它就会在shell上显示为ASCII代表。但它们是有效数字。 如果你用io:format(“~w”)打印它们,你会看到数字,你也可以在代码中将它们视为整数。
答案 1 :(得分:1)
为了澄清@ Khashayar的评论,Erlang字符串是整数列表。 shell基本上必须根据这些整数的值来猜测是将它显示为字符串还是整数列表。没有标签可以说它是一个字符串。你可以很容易地在shell中证明这一点。
1> [].
[]
2> [100].
"d"
通过使用二进制类型来表示字符串,mochijson2使这更简单一些。我强烈建议使用这个库而不是mochijson,它更受欢迎。
1> mochijson2:decode("[]").
[]
2> mochijson2:decode("[100]").
"d"
3> mochijson2:decode("[\"hello\"]").
[<<"hello">>]