2013-08-01 75 views
2

使用Mochijson解碼JSON列表會根據列表值產生錯誤的結果。正確解析Erlang [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庫或解決方法/修復的指針讚賞。 :-)

回答

1

它們被轉換成數字,只是這個erlang shell每當顯示一個整數列表時,它都會將它們顯示爲shell上的ASCII代表。但他們是有效的數字。 如果你用io:format(「〜w」)打印出來,你會看到數字,並且在你的代碼中你可以把它們看作整數。

1

爲了澄清@Khashayar的評論,Erlang字符串整數列表。 shell基本上必須根據這些整數的值來猜測它是否顯示爲字符串或整數列表。沒有標籤可以說它是一個字符串。你可以在shell中很容易地證明這一點。

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

mochijson2通過使用二進制類型來表示字符串使這更簡單一點。我強烈建議使用這個庫而不是mochijson,它更受歡迎。

1> mochijson2:decode("[]"). 
[] 
2> mochijson2:decode("[100]"). 
"d" 
3> mochijson2:decode("[\"hello\"]"). 
[<<"hello">>]