6

私は mochiweb を使用していますが、その json エンコーダーを使用して複雑なデータ構造を処理する方法がわかりません。mochijson と mochijson2 の違いは何ですか? 何か良い例はありますか?私は常に次のエラーが発生します。

46> T6={struct,[{hello,"asdf"},{from,"1"},{to,{a,"aa"}}]}.
{struct,[{hello,"asdf"},{from,"1"},{to,{a,"aa"}}]}
47> mochijson2:encode(T6).                                
** exception exit: {json_encode,{bad_term,{a,"aa"}}}
     in function  mochijson2:json_encode/2
     in call from mochijson2:'-json_encode_proplist/2-fun-0-'/3
     in call from lists:foldl/3
     in call from mochijson2:json_encode_proplist/2


39> T3={struct,[{hello,"asdf"},{[{from,"1"},{to,"2"}]}]}.
{struct,[{hello,"asdf"},{[{from,"1"},{to,"2"}]}]}
40> mochijson:encode(T3).                                 
** exception error: no function clause matching mochijson:'-json_encode_proplist/2-fun-0-'({[{from,"1"},{to,"2"}]},
                                                                                           [44,"\"asdf\"",58,"\"hello\"",123],
                                                                                           {encoder,unicode,null})
     in function  lists:foldl/3
     in call from mochijson:json_encode_proplist/2
4

2 に答える 2

11

mochijson2 は、文字列をバイナリとして、リストを配列として処理し、UTF-8 のみをデコードします。mochijson は、Unicode コード ポイントをデコードおよびエンコードします。

深い構造体を作成するには、次のことを行いました。

2> L = {struct, [{key2, [192]}]}. 
{struct,[{key2,"?"}]}
3> 
3> L2 = {struct, [{key, L}]}.   
{struct,[{key,{struct,[{key2,"?"}]}}]}
4> 
4> mochijson:encode(L2).
[123,"\"key\"",58,
 [123,"\"key2\"",58,[34,"\\u00c0",34],125],
 125]

したがって、リストを使用してデータ構造を再帰的に作成すれば問題ありません。深い構造体がサポートされていない理由はわかりませんが、少なくとも作成しようとしている方法ではサポートされていないようです。他の誰かがこれを行うためのより賢い方法を知っているかもしれません。

このスレッドもチェックできます: mochijson2 examples!

また

Erlang で Web アプリケーションの開発を開始するためのビデオ チュートリアル

于 2009-07-14T18:26:29.847 に答える
4
T6={struct, [{hello,"asdf"},{from,"1"},{to, {a,"aa"}} ]}.

代わりに次のようにする必要があります。

T6={struct, [{hello,"asdf"},{from,"1"},{to, {struct, [{a,"aa"}]}} ]}.

ネストされた構造は、最上位オブジェクトと同じ「構造」スタイルを持つ必要があります。

于 2010-09-29T03:50:54.167 に答える