0

JSONオブジェクトのリスト(nosql dbから受信)があり、いくつかのキーを削除または名前変更したいと思います。そして、もう一度データをJSONオブジェクトのリストとして返したいと思います。

このStackoverflowの投稿は、mochijson2の使用方法をよく理解しています。そして、リスト内包表記を使用してJSONオブジェクトのリストを調べることができると思います。

私がこだわっているのは、リスト内包内の各JSONオブジェクト(またはmochijson2が使用されている場合はproplist)のキーを削除する方法です。プロップリストの削除機能を利用できます。しかし、リスト内包内でそれを行おうとすると失敗します。

コンテキストのビットコードは次のとおりです。

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

コードで示されている提案は大歓迎です。

4

1 に答える 1

3

lists:keydelete(Key、N、TupleList)を使用して、特定のタプルが削除された新しいタプルリストを返すことができます。したがって、リスト内包表記で、エントリごとにタプルリスト(またはプロップリスト)を抽出し、キーを削除して新しい構造体を作成します。

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 /

于 2010-10-08T11:59:19.207 に答える