jsonerlangmochiweb

How do I use mochijson to encode an array of objects?


I have two objects that I'd like to bundle up and ship in an array, encoded as JSON with mochijson. They are:

> Book0 = {struct, [{"title", "a book"}, {"id", "1"}]}.      
> Book1 = {struct, [{"title", "another book"}, {"id", "2"}]}.

However,

> mochijson:encode({struct, [{"books", [Book0, Book1]}]}).
** exception exit: {json_encode,{bad_char,{struct,[{"title","a book"},
                                                   {"id","1"}]}}}
     in function  mochijson:json_encode_string_unicode_1/1 (src/mochijson.erl, line 203)
     in call from mochijson:json_encode_string_unicode/1 (src/mochijson.erl, line 190)
     in call from mochijson:'-json_encode_proplist/2-fun-0-'/3 (src/mochijson.erl, line 151)
     in call from lists:foldl/3 (lists.erl, line 1197)
     in call from mochijson:json_encode_proplist/2 (src/mochijson.erl, line 154)

How do I structure my data for mochijson? I'm aware of this article but it, sadly, does not cover arrays of objects.


Solution

  • mochijson:encode({struct, [{"books", {array, [Book0, Book1]}}]}).

    [123,"\"books\"",58,
     [91,
      [123,"\"title\"",58,"\"a book\"",44,"\"id\"",58,"\"1\"",125],
      44,
      [123,"\"title\"",58,"\"another book\"",44,"\"id\"",58,
       "\"2\"",125],
      93],
     125]
    

    But the general consensus indeed seems to be: "use mochijson2" (which would correctly work for both cases with and without array).