【问题标题】:How to convert erlang varible in json format如何将erlang变量转换为json格式
【发布时间】:2018-02-02 16:17:51
【问题描述】:

在 json 中发送 erlang 数据可以通过以下方式完成:

ReqBody = << "{\"snippet\":\"Body\" }" >>

但是如果我有一个像

这样的变量
Temp = "data from erlang" 

如何以这种格式添加 Temp??

【问题讨论】:

标签: erlang


【解决方案1】:

为了生成 JSON,您绝对应该使用比您自己的代码经过更好测试的 JSON 库之一。我可以推荐纯 Erlang jsone 或 NIF jiffy。不要忘记他们每个人都需要将您的术语转换为适当的结构。

【讨论】:

  • 抱歉这么晚的评论..我使用了 jiffy,效果很好..非常感谢 Hyek
【解决方案2】:
>T = {"Temp","data from erlang"}.
>t2j:t2jp(T).
{"Temp":"data from erlang")

您可以使用my tuple to json module,或许多其他人之一。

【讨论】:

    【解决方案3】:

    您可以通过 http://erlang.org/doc/man/erlang.html#list_to_binary-1 转换 Temp

    然后做同样的事情。

    【讨论】:

    • 当然,但是如果Temp 包含引号怎么办?
    【解决方案4】:

    我会避免通过字符串连接生成 JSON。除非您非常仔细地验证输入,否则有人可能(有意或无意)偷偷摸摸,例如,将引号插入字符串并破坏所有内容。

    如果您要同时解析和生成 JSON,我建议您使用 Erlang 的开源 JSON 库之一。

    如果您只需要生成 JSON,那么您可能不需要库。你可以使用这样的东西作为起点(警告:未经测试的代码,可能有很多错误)

    encode(Term) ->
        iolist_to_binary(encode1(Term)).
    
    encode1(Term) when is_binary(Term) -> Term;
    encode1(true) -> <<"true">>;
    encode1(false) -> <<"false">>;
    encode1(Term) when is_atom(Term) -> encode1(atom_to_list(Term));
    encode1(Term) when is_integer(Term) -> list_to_binary(integer_to_list(Term));
    encode1(Term=[{_, _}|_]) -> % assume object if it starts with a tuple
        [<<"{">>,
         join([[encode1(K), <<":">>, encode1(V)] || {K, V} <- Term], <<",">>),
         <<"}">>];
    encode1(Term) when is_list(Term) ->
        case io_lib:printable_list(Term) of
            true ->
                [list_to_binary(io_lib:format("~p", [Term]))];
            false ->
            [<<"[">>, join([encode1(T) || T <- Term], <<",">>), <<"]">>]
        end.
    
    join(Items, Sep) -> join1(Items, Sep, []).
    join1([], _, Acc) -> lists:reverse(Acc);
    join1([H], Sep, Acc) -> join1([], Sep, [H|Acc]);
    join1([H|T], Sep, Acc) -> join1(T, Sep, [Sep,H|Acc]).
    

    请注意,此实现允许一些无效的 JSON 构造,例如不是字符串的键。

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 2012-02-09
      • 2021-11-06
      • 2020-08-30
      • 2019-11-12
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多