【问题标题】:Erlang : Tuple List into JSONErlang:元组列表转换为 JSON
【发布时间】:2011-04-24 19:35:48
【问题描述】:

我有一个元组列表,它们是 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"}]

并且想要这个(二进制 JSON 字符串):

<<"{\"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 可以更好地解释的格式。然后转换成二进制。或者想办法将所有字符表示为字符串(而不是将某些字符表示为整数列表)。

如果您能用一些示例代码为我指明正确的方向,我们将不胜感激。

【问题讨论】:

    标签: json erlang tuples mochiweb mochijson2


    【解决方案1】:

    您需要将其中的那些字符串转换为二进制发送到编码器之前。 mochijson2 编码器只是将其视为整数列表并将其输出为数组。所以mochijson2需要你把{'key', "val"}转换成{'key', &lt;&lt;"val"&gt;&gt;}

    在你的代码中试试这个:

    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]).
    

    【讨论】:

    • 谢谢乔恩!这正是我一直在寻找的。列表理解很好,我个人偏好。
    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    相关资源
    最近更新 更多