【问题标题】:How do I use mochijson to encode an array of objects?如何使用 mochijson 对对象数组进行编码?
【发布时间】:2012-03-13 19:48:17
【问题描述】:

我有两个对象,我想将它们捆绑在一起并以数组的形式发送,用 mochijson 编码为 JSON。它们是:

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

然而,

> 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)

如何为 mochijson 构建我的数据?我知道article,但遗憾的是,它不包括对象数组。

【问题讨论】:

    标签: json erlang mochiweb


    【解决方案1】:

    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]
    

    但普遍的共识似乎确实是:“使用 mochijson2”(无论有无array,这两种情况都适用)。

    【讨论】:

    • 最正确的是 mochijson2:encode({struct,[<<"books">>,[Book0,Book1]]}). 其中:Book0 = {struct, [{<<"title">>, <<"a book">>}, {<<"id">>, <<"1">>}]}.Book1 = {struct, [{<<"title">>, <<"another book">>}, {<<"id">>, <<"2">>}]}. 请注意,mochijson2 是比 mochijson 更新的实现
    • 使用 mochijson2,我们可以删除 struct 关键字和 JSON 对象作为 {Key, Value}s 的列表。
    • 如果你正在做大量的编码/解码寻找比 mochiweb 更快的东西,我推荐jiffy。它是一组 nif,使用类似于 mochijson 的 JSON 结构。结构的主要区别是您不需要元组中的structarray 原子。例如)而不是上面它只是{[{"books",[Book0, Book1]}]}
    【解决方案2】:

    经过一番深入研究后,最好的答案是:除非你有充分的理由不这样做,否则更喜欢 mochijson2。

    【讨论】:

      【解决方案3】:

      mochijson2 也比 mochijson 快。

      【讨论】:

        猜你喜欢
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-01
        • 1970-01-01
        • 2015-10-19
        相关资源
        最近更新 更多