Re: A little help: expirementing with replacing mochison2 with jiffy when web controller returns json

43 views
Skip to first unread message
Message has been deleted

Evgeny M

unread,
Aug 5, 2015, 7:35:25 PM8/5/15
to ChicagoBoss
Jiffy does not work with tuples, and bossdb models are just tuples

You need to put your model in a list and then put the list in another tuple

jiffy:encode({[Model]})

or something like this. 


четверг, 6 августа 2015 г., 0:10:59 UTC+3 пользователь jim rosenblum написал:
For performance reasons I want to replace the use of mochijson2 with jiffy. My CB webserver returns a large number (like 3000) models which have to be encoded into json (the web controller returns {json, proplist})

in boss_json.erl I replaced the calls to mochijson2:encode with jiffy:encode

encode([First|_] = Data, ModelList) ->
    case boss_model_manager:is_model_instance(First, ModelList) of
        true ->
            %mochijson2:encode(lists:map(fun boss_model_manager:to_json/1, Data));
    jiffy:encode(lists:map(fun boss_model_manager:to_json/1, Data)Sto_json);
        false ->
            %mochijson2:encode(json_data1(Data, ModelList, []))
    jiffy:encode(json_data1(Data, ModelList, []))
    end;

encode([],_) ->
    "";

encode(Data, ModelList) ->
    case boss_model_manager:is_model_instance (Data, ModelList) of
        true ->
            %mochijson2:encode(boss_model_manager:to_json(Data));
   jiffy:encode(boss_model_manager:to_json(Data));
        false ->
            %mochijson2:encode(json_data1(Data, ModelList, []))
    jiffy:encode(json_data1(Data, ModelList, []))
    end.


When I then exercise CB, I receive the following error


[error] Unhandled Error: throw:{error,
          {invalid_ejson,
              {struct,
                  [{customers,
                       [{struct,
                            [{id,<<"customer-1">>},
                             {cust_id,<<"CUSTOMER1">>},
                             {description,<<"cust1">>},
                             {status,<<"green">>},
                             {status_time,<<"2015-08-05T16:47:33Z">>},
                             {status_time_desc,
                                 <<"2015-08-05 16:47:33.570437">>}]}]},
                   {facilityCount,
                       [{struct,
                            [{count,0},
                             {monitored,0},
                             {green,0},
                             {yellow,0},
                             {red,0},
                             {paused,0}]}]}]}}} Stacktrace: [{jiffy,encode,2,[{file,"src/jiffy.erl"},{line,93}]},{boss_web_controller_render,process_action_result,4,[{file,"src/boss/boss_web_controller_render.erl"},{line,178}]},{boss_web_controller,execute_action_inner,9,[{file,"src/boss/boss_web_controller.erl"},{line,290}]},{boss_web_controller_handle_request,process_dynamic_request,5,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,254}]},{boss_web_controller_handle_request,process_request,5,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,240}]},{boss_web_controller_handle_request,set_timer,8,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,160}]},{boss_web_controller_handle_request,build_dynamic_response,5,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,129}]},{boss_web_controller_handle_request,handle_request,4,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,26}]}]


Is anyone fluent enough in the differences between jiffy and mochijson2 to help me understand what I need to do?

jim rosenblum

unread,
Aug 6, 2015, 10:46:03 AM8/6/15
to ChicagoBoss
I was able to use jsonx by adding it to the list of dependencies in rebar.config and then replacing the 4 uses of mochijson2:encode in src/boss/boss_json.erl 
It seems to work, I'm not sure if I have missed anything, but everything seems to have worked.

I also got jsone to work by:
Editing ChicaagoBoss/rebar.config
1. add, at the end of the maintained by others section, the following dependency
{jsone, ".*", {git, "git://github.com/sile/jsone.git", {tag, "v0.3.3-hipe"}}}

Editing ChicagoBoss/src/boss/boss_json
1. replace mochijson2:encode with jsone:encode
2. json_data1([], _, Acc) ->
     {struct, lists:reverse(Acc)}; <- make this line  {lists:reverse(Acc)};

Editing ChicagoBoss/src/boss/model_manager_adapters/boss_model_manager_boss_db.erl
1. the final clause of to_json(Object) function changes from
   {struct, Data}. to
   {Data}.
Reply all
Reply to author
Forward
0 new messages