【问题标题】:Encoding Erlang Tuple as JSON将 Erlang 元组编码为 JSON
【发布时间】:2020-09-10 21:53:29
【问题描述】:

如何将列表中包含元组、原子和二进制字符串的列表转换为 JSON? 我看到Erlang : Tuple List into JSON 我找到了https://github.com/rustyio/BERT-JS

我想要一个我可以调用的 API

erlang_json:convert([{a, b, {{c, d}}, 1}, {"a", "b", {{cat, dog}}, 2}

原子将被转换为字符串或其他一些标准方式以在 Javascript 端进行处理。

我有复杂的 Erlang 列表需要发送到我的网页。

【问题讨论】:

    标签: json erlang


    【解决方案1】:

    目前尚不清楚[{a, b, {{c, d}}, 1}, {"a", "b", {{cat, dog}}, 2}... 将转换为 JSON 格式,但您可以查看jiffyjsx。它们都适用于简单的键/值结构。例如:

    > Term = #{a => b, c => 1, <<"x">> => <<"y">>}.
    #{a => b,c => 1,<<"x">> => <<"y">>}
    
    > jiffy:encode(Term).
    <<"{\"x\":\"y\",\"c\":1,\"a\":\"b\"}">>
    
    > jsx:encode(Term).
    <<"{\"a\":\"b\",\"c\":1,\"x\":\"y\"}">>
    

    如果你能说出你希望你的示例输入变成什么样的 JSON,我可能会给你一个更好的建议。

    【讨论】:

    • 要添加到这个答案,请参阅github.com/davisp/jiffy#data-format 以查看可以提供正确 json 的有效 erlang 数据类型。
    • 谢谢——我希望每个原子都变成一个字符串,因为我认为 JSON 中没有办法发送不在字符串中的字符。您的示例代码看起来正确,所以我会接受这个,我会检查 jiffy & jsx 谢谢!
    • 但是,JSON 仍然由键/值对组成。如果你把原子变成字符串,你仍然会在 erlang 中得到类似 {"a", "b", {{"c", "d"}}, 1} 的东西。您希望从中提取哪些键/值对?
    • @RyanStewart 是的,我明白了。我希望不必为元组编写自定义 JSON 编码器,例如。可以递归地将元组转换为数组并让客户端对其进行排序的东西。
    【解决方案2】:

    只为你 https://github.com/romanr321/t2j

    你不需要将它包装在一个列表中,它需要一个元组参数并返回一个 json 格式的字符串。

    >Tuple = {{key, value}, { key2, {key3, [value1, 2,3]}}}.
    >t2j:t2jp(Tuple).
    {"key":"value", "key2, {"key3":["value1", 2,3]}}
    

    【讨论】:

      【解决方案3】:

      图书馆jsone 很不错。它可以在映射或元组之间进行转换: https://github.com/sile/jsone

      我已广泛使用它,而且速度极快。

      我发现的唯一问题是包含地图列表的地图会引发错误。我希望这个问题得到解决,但也许我是唯一一个尝试这样做的人。

      【讨论】:

        猜你喜欢
        • 2011-04-24
        • 1970-01-01
        • 1970-01-01
        • 2014-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多