読者です 読者をやめる 読者になる 読者になる

mochijson2 の使い方

json erlang mochiweb

あまり無いので、メモ。

.erlang で mochiweb にはパスが通ってるの前提、trunk 最新版を使ってます。

出力したい JSON

[[1,2,3], [1,2,3], [1,2,3]]

Erlang では

> io:format("~s\n", [mochijson2:encode([[1,2,3],[1,2,3],[1,2,3]])]).
[[1,2,3],[1,2,3],[1,2,3]]

リストはそのままで構いません。

出力したい JSON

[
  {"key", "value", "key", "value"},
  {"key", "value", "key", "value"},
  {"key", "value"},
]

Erlang では

> JSON = mochijson2:encode([{struct, [{<<"key">>, <<"value">>}, {<<"key">>, <<"value">>}]}, {struct, [{<<"key">>, <<"value">>}, {<<"key">>, <<"value">>}]},{struct, [{<<"key">>, <<"value">>}]}]).
... 省略
> io:format("~s\n", [JSON]).
[{"key":"value","key":"value"},{"key":"value","key":"value"},{"key":"value"}]
> 

Python で言うところの辞書(マップ)を作るときは struct を使います。
単数、複数関係なくリストで {key,value} を囲むようにしてください。

{struct, [{Key1, Value1}]}.
{struct, [{Key1, Value1}, {Key2, Value2}]}.

これだけ憶えれば Erlang データ (主にタプル) を JSON に変換できます。

注意することとしては Value はリストではなくバイナリで有る必要があるようです。

エンコードネタは昔書いたのでそちらを参照してください。