erlang 下好用的json 库 ej

来源:互联网 发布:网络运营商 编辑:程序博客网 时间:2024/05/29 10:55

    erlang 下边的json 库用过几个,今天发现了ej库,解析和生成都很方便,下边是使用说明,里边详细的用法看里边的例子就可以了,这里给出的是为什么这么用,里边数据是怎么生成的。

1. ej  库下载地址是:

https://codeload.github.com/seth/ej/zip/master


2. 使用说明

% menu.json file%{"menu": {%"id": "file",%"value": "File",%"popup": {%"menuitem": [%{"value": "New", "onclick": "CreateNewDoc()"},%{"value": "Open", "onclick": "OpenDoc()"},%{"value": "Close", "onclick": "CloseDoc()"}%]%}%}}% menu.terms%{struct,%[{<<"menu">>,%{struct,%[{<<"id">>,<<"file">>},%{<<"value">>,<<"File">>},%{<<"popup">>,%{struct,%[{<<"menuitem">>,%[{struct,%[{<<"value">>,<<"New">>},%{<<"onclick">>,<<"CreateNewDoc()">>}]},%{struct,%[{<<"value">>,<<"Open">>},%{<<"onclick">>,<<"OpenDoc()">>}]},%{struct,%[{<<"value">>,<<"Close">>},%{<<"onclick">>,<<"CloseDoc()">>}]}]}]}}]}}]}.% menu.alt_terms%{[{<<"menu">>,%{[{<<"id">>,<<"file">>},%{<<"value">>,<<"File">>},%{<<"popup">>,%{[{<<"menuitem">>,%[{[{<<"value">>,<<"New">>},{<<"onclick">>,<<"CreateNewDoc()">>}]},%{[{<<"value">>,<<"Open">>},{<<"onclick">>,<<"OpenDoc()">>}]},%{[{<<"value">>,<<"Close">>},%{<<"onclick">>,<<"CloseDoc()">>}]}]}]}}]}}]}.% 产生测试数据make_terms(JsonFile) ->    {ok, Json} = file:read_file(JsonFile),    Base = filename:basename(JsonFile),    Decoder = mochijson2:decoder([{object_hook, fun({struct,L}) -> {L} end}]),    AltTerms = Decoder(Json),    Terms = mochijson2:decode(Json),    file:write_file(Base ++ ".terms", io_lib:format("~p.~n", [Terms])),    file:write_file(Base ++ ".alt_terms", io_lib:format("~p.~n", [AltTerms])).getwid()->    {[{<<"widget">>,        {[{<<"version">>,<<"1">>},            {<<"values">>,[1,2,3,4,5]},            {<<"debug">>,<<"on">>},            {<<"window">>,                {[{<<"title">>,<<"Sample Konfabulator Widget">>},                    {<<"name">>,<<"main_window">>},                    {<<"width">>,500},                    {<<"height">>,500}]}},            {<<"image">>,                {[{<<"src">>,<<"Images/Sun.png">>},                    {<<"name">>,<<"sun1">>},                    {<<"hOffset">>,250},                    {<<"vOffset">>,250},                    {<<"alignment">>,<<"center">>}]}},            {<<"text">>,                {[{<<"data">>,<<"Click Here">>},                    {<<"size">>,36},                    {<<"style">>,<<"bold">>},                    {<<"name">>,<<"text1">>},                    {<<"hOffset">>,250},                    {<<"vOffset">>,100},                    {<<"alignment">>,<<"center">>},                    {<<"onMouseUp">>,                        <<"sun1.opacity = (sun1.opacity / 100) * 90;">>}]}}]}}]}.getmenu()->    {[{<<"menu">>,        {[{<<"id">>,<<"file">>},            {<<"value">>,<<"File">>},            {<<"popup">>,                {[{<<"menuitem">>,                    [{[{<<"value">>,<<"New">>},{<<"onclick">>,<<"CreateNewDoc()">>}]},                        {[{<<"value">>,<<"Open">>},{<<"onclick">>,<<"OpenDoc()">>}]},                        {[{<<"value">>,<<"Close">>},                            {<<"onclick">>,<<"CloseDoc()">>}]}]}]}}]}}]}.test()->    Wid = getwid(),    {ok, [Widget]} = file:consult("/home/yangzm/tmp/widget.alt_terms"),    Ret = ej:get({"widget", "version"}, Wid),

0 0