erlang 下好用的json 库 ej

    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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值