2010-10-08 60 views
0

我有一個JSON對象列表(從nosql數據庫接收到)並且想要刪除或重命名某些鍵。然後我想再次將數據作爲JSON對象列表返回。Erlang:JSON列表到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), 

與代碼示出任何建議十分讚賞。

+0

我應該是A = <<「[{\」id \「:\ 「0129 \」,\「name \」:\「joe \」,\「photo \」:\「joe.jpg \」},{\「id \」:\「0759 \」,\「name \ :\「jane \」,\「photo \」:\「jane.jpg \」},{\「id \」:\「0929 \」,\「name \」:\「john \」,\「photo \「:\」john.jpg \「}]」>>。 – bjnortier 2010-10-08 12:00:02

+0

謝謝...絕對正確。 – 2010-10-08 12:05:23

回答

3

您可以使用列表: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\"}]">> 

順便說一下,使用列表/ *元組列表函數要比proplists/*函數快得多,但有時候稍不方便:http://sergioveiga.com/index.php/2010/05/14/erlang-listskeyfind-vs-proplistsget_value/