2009-06-16 11 views
16

Sono un bambino di due settimane riguardo a Erlang e Mochiweb. In precedenza avevo un sistema in esecuzione su PHP e presto mi sono reso conto che non sarebbe stato in grado di gestire il tipo di carico che mi aspettavo. Così ho deciso di passare il back-end a un server basato su Mochiweb. In questo momento ho bisogno di sapere come implementare JSON con Mochiweb. Sono pienamente consapevole dell'esistenza della libreria mochijson2, ma essendo un principiante, non riesco a capire come usarlo. Qualcuno potrebbe indicarmi un posto dove posso trovare esempi di utilizzo di questa libreria o di qualsiasi altra libreria json in erlang?esempi di mochijson2!

risposta

9

L'API mochijson2 consiste essenzialmente di due soli funzioni, che (se hai scaricato mochiweb) possono essere utilizzati direttamente dalla shell Erlang come segue:

erl -pa path/to/mochiweb/ebin 
... 
1> mochijson2:decode(<<"[1,2,3]">>). 
[1,2,3] 
2> iolist_to_binary(mochijson2:encode([1,2,3])). 
<<"[1,2,3]">> 

Ci sono alcuni casi di test nella parte inferiore di mochiweb/src/mochijson2.erl che potrebbero anche essere utili per comprendere il mapping tra termini JSON e termini di Erlang.

8

Sì, ho dovuto dedicare un po 'di tempo al codice sorgente per capire cosa stava succedendo. In realtà, questo descrive molto della mia esperienza con Erlang. Questo mi ha ottenuto, generando il JSON di cui ho bisogno. Ecco un rapido esempio.

ERL :: {struct, [{strKey, <<"strVal">>}, {intKey, 10}, {arrayKey, [1, 2, 3]}]} 
JSON :: {strKey:"strVal", intKey:10, arrayKey:[1, 2, 3]} 

Quindi, in questo esempio si può vedere come fare oggetti (che mochijson2 vuole che tu chiami le strutture), stringhe, interi e array. In bocca al lupo!

1

Qui ci sono i comandi Erlang equivalenti in aggiunta a @ di rik.the.vik commento:

erl -pa path/to/mochiweb/ebin 
... 
iolist_to_binary(mochijson2:encode({struct, [{strKey, <<"strVal">>}, {intKey, 10}, {arrayKey, [1, 2, 3]}]})). 
mochijson2:decode(<<"{\"strKey\":\"strVal\", \"intKey\":10, \"arrayKey\":[1, 2, 3]}">>).