2009-07-14 7 views
6

Ich benutze mochiweb und ich weiß nicht, wie man seinen json Kodierer verwendet, um mit komplexer Datenstruktur umzugehen. Was sind die Unterschiede zwischen Mochijson und Mochijson2? Gibt es ein gutes Beispiel? Ich bekomme immer folgende Fehler:Wie benutzt man Mochijson um die Datenstruktur in Erlang zu verschlüsseln?

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 

Antwort

11

mochijson2 mit Strings als Binärdateien, Listen als Arrays arbeitet, und nur dekodiert UTF-8. mochijson decodiert und codiert Unicode-Codepunkte.

Um eine tiefe Struktur Ich habe folgende zu erstellen:

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] 

Also, wenn Sie rekursiv Ihre Datenstruktur unter Verwendung von Listen erstellen, dann werden Sie in Ordnung sein. Ich bin mir nicht sicher, warum tiefe Strukturen nicht unterstützt werden, aber sie scheinen nicht zu sein, zumindest nicht die Art, wie du sie zu erstellen versuchst. Vielleicht weiß jemand anders einen schlaueren Weg, dies zu tun.

Sie können auch diesen Thread ansehen: mochijson2 examples!

oder

http://beebole.com/en/blog/erlang/tutorial-web-application-erlang/

4

T6 = {struct [{Hallo "asdf"}, {von "1"}, { zu, {a, "aa"}}]}.
sollte stattdessen
sein T6 = {struct, [{hallo, "asdf"}, {von, "1"}, {zu, {struct, [{a, "aa"}]}}]}.

Die verschachtelten Strukturen müssen den gleichen "struct" -Stil wie das Objekt der obersten Ebene haben.