JSON-кодирование карты в Elixir с использованием Poison

Я пытаюсь разобрать свою карту в строку json, как мне это сделать, используя яд?

Я пробовал следующее.

iex(19)> test = %{"api_key" => "sklfjklasfj"}
%{"api_key" => "sklfjklasfj"}
iex(20)> Poison.Encoder.encode(test, [])
[123, [[34, ["api_key"], 34], 58, [34, ["sklfjklasfj"], 34]], 125]

Чего я ожидал, так это

"{"api_key": "sklfjklasfj"}"

person MartinElvar    schedule 27.02.2015    source источник
comment
Обратите внимание, что вы также можете использовать Poison.encode/1 и Poison.decode/1, не касаясь Poison.Encoder.   -  person whatyouhide    schedule 27.02.2015
comment
Спасибо, что вы скрываете :)   -  person MartinElvar    schedule 27.02.2015


Ответы (1)


Я понял, что яд возвращает char_list, который можно привести к такой строке.

iex(27)> to_string Poison.Encoder.encode(test, [])
"{\"api_key\":\"sklfjklasfj\"}"

По состоянию на октябрь 2017 г. (Poison v3) код будет

iex(27)> to_string Poison.encode_to_iodata!(test, [])
"{\"api_key\":\"sklfjklasfj\"}"

или просто

iex(27)> Poison.encode!(test, [])
"{\"api_key\":\"sklfjklasfj\"}"

без вызова to_string.

person MartinElvar    schedule 27.02.2015
comment
Это не char_list, который представляет собой простой список кодовых точек; это список ввода-вывода, который может быть произвольно вложен. Вы можете отправлять их напрямую в виде файла или сокета ввода-вывода, и при необходимости они будут сглажены. См. dev.af83.com/2012/01/16/erlang-iolist. .html, например. - person Roger Lipscombe; 26.05.2016
comment
Обратите внимание, что в новейшей версии Poison вы должны использовать encode_to_iodata! вместо encode. - person xji; 05.10.2017
comment
Или просто используйте encode! и сбросьте вызов to_string. - person xji; 05.10.2017