i will have a look
thx for sharing.



2013/12/23 Graeme Defty <[email protected]>

> Chan my apologies. I got lost in finding a suitable website to post a
> snippet then didn't get around to using any of them!
>
> There is barely 100 lines, but I didn't want to post it here.
>
> In the end I just used GitHub.
>
> You can find it here https://github.com/graeme-defty/JSONerl
>
> Suggestions welcome, of course.
>
> g
>
>
>
> On 9 December 2013 10:00, chan sisowath <[email protected]> wrote:
>
>> hi Graeme,
>>
>> if you could make it available, i could be interested.
>>
>> regards
>> chan.
>>
>>
>>
>> 2011/12/5 Graeme Defty <[email protected]>
>>
>>> I also had fun getting JSON to do what I wanted.
>>>
>>> After digging around in the code for a while, I realised that to create
>>> the JSON that I needed I had to walk through my data to set up the correct
>>> structure to pass into the JSON libraries.
>>>
>>> It seemed to me that the complexity of the functions I had to write to
>>> walk the data was getting harder than what would be needed to generate the
>>> JSON directly! (Well, maybe not harder, but certainly up there.)
>>>
>>> I looked around at other Erlang/JSON implementations and it seemed to me
>>> that everyone was trying to solve the wrong problem.
>>>
>>> The common goal (with all the libraries I found anyway) was to try and
>>> JSONise some arbitrary Erlang form in such a manner that the original form
>>> could be re-created without prior knowledge at the other end.
>>>
>>> Now this is a laudable goal, butunless I am writing some goofy
>>> applications that is not the most common use case. Normally, JSON is used
>>> for interchange/transmission of data. The message structure is specified
>>> and understood, and may or may not be under your control, but it is at
>>> least well-known, and the task is to build it from the data you have
>>> available in your app.
>>>
>>> In a functional language like Erlang, I feel the 'builder' style works
>>> really well, and so I put together a short library (and it really is short
>>> - about 100 lines, i think) which lets me use such a builder style.
>>>
>>> As an example, lets say the target is a JSON structure containing
>>> details of a competition. The message contents include details of the club
>>> holding the comp followed by an array of players names and score .
>>>
>>> S0 the output would look something like this:
>>>
>>> {
>>> "details" : {
>>> "club" : "Graemes Testing Club",
>>> "course" : "North Course",
>>> "name" : "February Monthly Event",
>>> "date" : 2011/2/26,
>>>
>>>
>>>
>>> "type" : "Endurance"
>>> },
>>> "results" : [
>>>   {
>>>   "fname" : "Powers",
>>>   "gname" : "Jib",
>>>   "score" : 69
>>>   },
>>>   {
>>>   "fname" : "Moroney",
>>>
>>>
>>>
>>>   "gname" : "Jim",
>>>   "score" : 73
>>>   },
>>>
>>> <<snip>>
>>>
>>>   {
>>>   "fname" : "Defty",
>>>   "gname" : "Graeme",
>>>   "score" : 86
>>>
>>>
>>>
>>>   }
>>>   ]
>>> }
>>>
>>>
>>> To create that, my code is as follows :
>>>
>>> lb_format(1, Cred, Comp, Entries, Overall, Others, Divisions) ->
>>>   json:format(
>>>     json:object([
>>>         {json:val("details"),
>>>           json:object([
>>>             {json:val("club"), json:val((Comp:club()):title())},
>>>             {json:val("course"),
>>> json:val(((hd(Comp:comp_rounds())):course()):name())},
>>>             {json:val("name"), json:val(Comp:name())},
>>>             {json:val("date"), json:val(Comp:date())},
>>>             {json:val("type"),
>>> json:val((hd(Comp:comp_rounds())):comp_type_disp())}
>>>           ])
>>>         },
>>>         {json:val("results"),
>>>           json:array([
>>>             json:object([
>>>               {json:val("fname"),
>>> json:val(((((hd(E:entry_players())):player()):usr()):fname()))},
>>>               {json:val("gname"),
>>> json:val(((((hd(E:entry_players())):player()):usr()):gname()))},
>>>               {json:val("score"), json:val(trunc(E:event_score()))}
>>>             ]) || E <- Entries],$\n)}
>>>     ]),2
>>>   );
>>>
>>> Not to everyone's taste, perhaps, but the code structure mirrors closely
>>> the JSON structure and the signal to noise ratio is fairly good.
>>>
>>> The 2 on the second last line is the increment for indenting so that the
>>> JSON looks nice. The message can be shortened a bit at the cost of
>>> readability by setting this to zero so there is no indentation.
>>>
>>> Happy to make this available if anyone is interested.
>>>
>>> Cheers,
>>>
>>> g
>>> ________________________________________
>>>
>>> On 5 December 2011 06:46, Drew <[email protected]> wrote:
>>>
>>>> I am trying to take some internal data objects, and return them as
>>>> JSON.
>>>>
>>>> My model looks like this:
>>>> -module(parse, [Content,Body]).
>>>> -compile(export_all).
>>>>
>>>>
>>>> My controller looks like this:
>>>> index('GET',[]) ->
>>>>  {json, [{
>>>>               content, "Some Text"
>>>>           }]}.
>>>>
>>>> This works great, but if I return any complex dataset like an array or
>>>> tuple, it errors out with JSON errors.
>>>>
>>>>
>>>> content, [1,2,3] //Outputs unicode (okay I guess)
>>>>
>>>> content, [{1},2,3]  //Error, function_clause
>>>>
>>>> content, {1,2,3} //Outputs time
>>>> content, {1,2,3,4} //Error, bad_term
>>>>
>>>> I have been slightly more successful using mochijson2, but I like the
>>>> automagic part of json returns.  Can you help explain or document how
>>>> I can return complex data structures via JSON action?
>>>>
>>>
>>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "ChicagoBoss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "ChicagoBoss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
You received this message because you are subscribed to the Google Groups 
"ChicagoBoss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to