2015-02-27 3 views
8

Sto provando ad analizzare la mia mappa in una stringa json, come farei usando veleno?JSON Codifica una mappa in Elisir usando Poison

Ho provato quanto segue.

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] 

quello che mi aspetterei era

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

Nota è anche possibile utilizzare 'Poison.encode/1' e' Poison.decode/1' senza toccare 'Poison.Encoder'. – whatyouhide

+0

Grazie mille per favore :) – MartinElvar

risposta

13

mi sono reso conto di veleno stava tornando un char_list, che può essere colato in una stringa in questo modo.

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

A partire da ottobre 2017 (Veleno v3), il codice sarebbe

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

o semplicemente

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

senza la chiamata to_string.

+1

Non è un 'char_list', che è solo un elenco di punti di codice; è un elenco di IO, che può essere annidato arbitrariamente. Puoi inviarli direttamente come file o socket IO, e verranno appiattiti quando necessario. Vedere http://dev.af83.com/2012/01/16/erlang-iolist.html, ad esempio. –

+0

Nota ora nella versione più recente di Poison userai 'encode_to_iodata!' Invece di solo 'encode'. –

+0

O semplicemente usa 'encode!' E rilascia la chiamata 'to_string'. –

Problemi correlati