Erlang: список JSON в список JSON - PullRequest
0 голосов
/ 08 октября 2010

У меня есть список объектов JSON (полученный из базы данных nosql) и я хочу удалить или переименовать некоторые ключи. И затем я хочу вернуть данные в виде списка объектов JSON еще раз.

Это сообщение Stackoverflow дает хорошее представление о том, как использовать mochijson2. И я думаю, что мог бы использовать понимание списка , чтобы просмотреть список объектов JSON.

Часть, с которой я застрял, - это как удалить ключ для каждого объекта JSON (или проплиста, если используется mochijson2) в пределах понимания списка. Я могу использовать функцию удаления проплистов. Но я безуспешно пытаюсь сделать это в рамках понимания списка.

Вот битовый код для контекста:

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

Любые предложения, иллюстрированные кодом, приветствуются.

1 Ответ

3 голосов
/ 08 октября 2010

Вы можете использовать списки: 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\"}]">>

Кстати, использование функций списков / * списков кортежей намного быстрее, но иногда немного менее удобно, чем функции проплистов / *: http://sergioveiga.com/index.php/2010/05/14/erlang-listskeyfind-vs-proplistsget_value/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...