【问题标题】:Erlang : JSON List to JSON ListErlang:JSON 列表到 JSON 列表
【发布时间】:2010-10-08 20:04:26
【问题描述】:

我有一个 JSON 对象列表(从 nosql 数据库接收)并且想要删除或重命名一些键。然后我想再次将数据作为 JSON 对象列表返回。

这个Stackoverflow post 提供了如何使用mochijson2 的良好感觉。我想我可以使用 list comprehension 来浏览 JSON 对象列表。

我坚持的部分是如何在列表理解中删除每个 JSON 对象(或 proplist,如果使用 mochijson2)的键。我可以使用proplists 的delete function。但是在列表理解中尝试这样做时我没有成功。

这是上下文的代码:

A = <<"[{\"id\": \"0129\", \"name\": \"joe\", \"photo\": \"joe.jpg\"  }, {\"id\": \"0759\", \"name\": \"jane\", \"photo\": \"jane.jpg\"  }, {\"id\": \"0929\", \"name\": \"john\", \"photo\": \"john.jpg\" }]">>. 
Struct = mochijson2:decode(A). 
{struct, JsonData} = Struct,
{struct, Id} = proplists:get_value(<<"id">>, JsonData),

非常感谢任何用代码说明的建议。

【问题讨论】:

  • 我应该是 A = >.

标签: json erlang mochijson2


【解决方案1】:

您可以使用 lists:keydelete(Key, N, TupleList) 返回删除某些元组的新元组列表。所以在列表理解中,为每个条目提取元组列表(或 proplists),并创建一个删除键的新结构:

B = [{struct, lists:keydelete(<<"name">>, 1, Props)} || {struct, Props} <- Struct].

给予:

[{struct,[{<<"id">>,<<"0129">>},
          {<<"photo">>,<<"joe.jpg">>}]},
 {struct,[{<<"id">>,<<"0759">>},
          {<<"photo">>,<<"jane.jpg">>}]},
 {struct,[{<<"id">>,<<"0929">>},
          {<<"photo">>,<<"john.jpg">>}]}]

iolist_to_binary(mochijson2:encode(B)).

给予:

<<"[{\"id\":\"0129\",\"photo\":\"joe.jpg\"},{\"id\":\"0759\",\"photo\":\"jane.jpg\"},{\"id\":\"0929\",\"photo\":\"john.jpg\"}]">>

顺便说一句,使用 lists/* 元组列表函数要快得多,但有时不如 proplists/* 函数方便:http://sergioveiga.com/index.php/2010/05/14/erlang-listskeyfind-vs-proplistsget_value/

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 2021-04-02
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多