Domanda

Sto usando mochiweb e non so come usare il suo encoder JSON a che fare con la struttura dati complessa. Qual è la differenza tra mochijson e mochijson2? C'è un buon esempio? Ho sempre trovato i seguenti errori:

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
È stato utile?

Soluzione

mochijson2 funziona con le stringhe come binari, elenca come array, e decodifica solo UTF-8. mochijson decodifica e codifica punti di codice unicode.

Per creare una struttura profonda che ho fatto il seguente:

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]

Quindi, se si crea in modo ricorsivo la struttura di dati utilizzando gli elenchi allora andrà tutto bene. Io non sono sicuro perché le strutture profonde non sono supportati, ma non sembrano essere, almeno non il modo in cui si sta cercando di creare loro. Forse qualcun altro conosce un modo più intelligente per farlo.

È anche possibile controllare questa discussione: mochijson2 esempi

o

video tutorial per iniziare a sviluppare applicazioni Web su Erlang

Altri suggerimenti

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

dovrebbe invece essere:

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

Le strutture nidificate devono avere lo stesso stile "struct", come l'oggetto di livello superiore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top