2012-03-07 12 views
1

2つのオブジェクトをバンドルして配列に入れて、mochijsonでJSONとしてエンコードします。彼らは以下のとおりです。mochijsonを使用してオブジェクトの配列をエンコードするにはどうすればよいですか?

> Book0 = {struct, [{"title", "a book"}, {"id", "1"}]}.  
> Book1 = {struct, [{"title", "another book"}, {"id", "2"}]}. 

しかし、

> mochijson:encode({struct, [{"books", [Book0, Book1]}]}). 
** exception exit: {json_encode,{bad_char,{struct,[{"title","a book"}, 
                {"id","1"}]}}} 
    in function mochijson:json_encode_string_unicode_1/1 (src/mochijson.erl, line 203) 
    in call from mochijson:json_encode_string_unicode/1 (src/mochijson.erl, line 190) 
    in call from mochijson:'-json_encode_proplist/2-fun-0-'/3 (src/mochijson.erl, line 151) 
    in call from lists:foldl/3 (lists.erl, line 1197) 
    in call from mochijson:json_encode_proplist/2 (src/mochijson.erl, line 154) 

にはどうすればmochijsonのために自分のデータを構造化しますか?私はこれを知っていますarticleしかし、悲しいことに、オブジェクトの配列をカバーしていません。

答えて

4

mochijson:エンコード({構造体、[{ "書籍"、{アレイ、[Book0、BOOK1]}}]})。 (正確にとarrayせずに両方のケースのために働くことになる)「mochijson2を使用」:

[123,"\"books\"",58, 
[91, 
    [123,"\"title\"",58,"\"a book\"",44,"\"id\"",58,"\"1\"",125], 
    44, 
    [123,"\"title\"",58,"\"another book\"",44,"\"id\"",58, 
    "\"2\"",125], 
    93], 
125] 

は、しかし、一般的なコンセンサスは確かのようです。

+0

最も正確 'mochijson2:エンコード({構造体、[<<"books">>、[Book0、BOOK1]]})'ここで: 'Book0 = {構造体、[{<<"title">>、<<"a book">>}、{<<"id">>、<<"1">> 'mochijson2'は、' mochijson'よりも新しい実装であることに注意してください。 '' mochijson2''は、 '' mochijson''より新しい実装です。 ' –

+0

mochijson2では' struct、 'キーワードとJSONオブジェクトを' {Key、Value} 'のリストとして削除できます。 – shino

+2

mochiwebよりも速いものを探しているエンコード/デコードをたくさん行っているなら、[jiffy](https://github.com/davisp/jiffy)をお勧めします。これは、JSON用のmochijsonと同様の構造を使用する一連のnifです。構造の主な違いは、タプルに 'struct'と' array'アトムが必要ないことです。たとえば、上記の代わりに '{[{" books "、[Book0、Book1]}]}'とするだけです。 –

2

ソースダイビングのビットの後で、最高の答えは、あなたが優れた理由がない限り、mochijson2を好むことです。

1

mochijson2も高速ですが、mochijsonです。

関連する問題