2015-02-27 9 views
8

Próbuję przetworzyć moją mapę na ciąg jsonów, jak mógłbym to zrobić za pomocą trucizny?JSON Kodowanie mapy w eliksirie za pomocą Trucizny

Próbowałem następujące.

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] 

Co by się spodziewać było

"{"api_key": "sklfjklasfj"}" 
+4

Uwaga możesz także użyć 'Poison.encode/1' i' Poison.decode/1' bez dotykania 'Poison.Encoder'. – whatyouhide

+0

Dziękuję whatyouhide :) – MartinElvar

Odpowiedz

13

zdałem sobie sprawę, trucizna wracał do char_list, który można rzutować na sznurku jak tak.

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

Od października 2017 Poison (v3), kod byłoby

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

lub po prostu

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

bez wezwania to_string.

+1

To nie jest "char_list", która jest po prostu płaską listą punktów kodowych; jest to lista IO, która może być dowolnie zagnieżdżona. Możesz wysłać je bezpośrednio jako plik lub gniazdo IO, a w razie potrzeby zostaną spłaszczone. Zobacz na przykład http://dev.af83.com/2012/01/16/erlang-iolist.html. –

+0

Zauważ, że w najnowszej wersji Poison użyjesz 'encode_to_iodata!' Zamiast tylko 'encode'. –

+0

Lub po prostu użyj 'encode!' I upuść wywołanie 'to_string'. –

Powiązane problemy