Erlang: 将元组列表转换为JSON

8

我有一组元组,其中包含HTTP头信息。我想将该列表转换为JSON对象。我尝试使用mochijson2,但没有成功。

所以我有以下内容:

[{'Accept',"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"},
 {'Accept-Charset',"ISO-8859-1,utf-8;q=0.7,*;q=0.7"},
 {'Accept-Encoding',"gzip,deflate"},
 {'Accept-Language',"en-us,en;q=0.5"},
 {'Cache-Control',"max-age=0"},
 {'Connection',"close"},
 {'Cookie',"uid=CsDbk0y1bKEzLAOzAwZUAg=="},
 {'User-Agent',"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10"}]

And would like this ( a binary JSON string ) :

<<"{\"Accept\":\"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\",
 \"Accept-Charset\":\"ISO-8859-1,utf-8;q=0.7,*;q=0.7\",
 \"Accept-Encoding\":\"gzip,deflate\",
 \"Accept-Language\":\"en-us,en;q=0.5\",
 \"Cache-Control\":\"max-age=0\",
 \"Connection\":\"close\",
 \"Cookie\":\"uid=CsDbk0y1bKEzLAOzAwZUAg==\",
 \"User-Agent\":\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10\"}">>

当 A 是元组列表时,我尝试使用以下代码:

list_to_binary(mochijson2:encode(A)).

我猜需要将它转换成mochijson2能更好解释的格式,然后再转换为二进制。或者找到一种方法,让所有字符都表示为字符串(而不是一些整数列表)。
如果您能提供一些示例代码,那将不胜感激。
1个回答

7

在将其发送到编码器之前,您需要将其中的字符串转换为二进制。mochijson2编码器只将其视为整数列表并将其输出为数组。因此,mochijson2需要您将{'key', "val"}转换为{'key', <<"val">>}

在您的代码中尝试这个:

Original = [
  {'Accept-Charset',"ISO-8859-1,utf-8;q=0.7,*;q=0.7"}, 
  {'Accept-Encoding',"gzip,deflate"}
].
StingConverted = [ {X,list_to_binary(Y)} || {X,Y} <- Original ].
Output = mochijson2:encode(StingConverted).
io:format("This is correct: ~s~n", [Output]).

或者如果您更喜欢使用Funs:

Original = [
  {'Accept-Charset',"ISO-8859-1,utf-8;q=0.7,*;q=0.7"}, 
  {'Accept-Encoding',"gzip,deflate"}
].
ConvertFun = fun({X,Y}) -> {X,list_to_binary(Y)} end.
StingConverted = lists:map(ConvertFun, Original).
Output = mochijson2:encode(StingConverted).
io:format("This is correct: ~s~n", [Output]).

谢谢Jon!这正是我在寻找的。列表推导式很好,也是我的个人偏好。 - Ben Ahlan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接