要在json中发送一个erlang数据,可以通过以下方式完成:
ReqBody = << "{\"snippet\":\"Body\" }" >>
但如果我有一个变量
Temp = "data from erlang"
我如何以这种格式添加Temp?
btxsgosb1#
为了生成JSON,你一定要使用JSON库中的一个,它比你自己的代码测试得更好。我可以推荐纯Erlang jsone或NIF jiffy。不要忘记,它们中的每一个都需要将你的术语转换为正确的结构。
vawmfj5a2#
>T = {"Temp","data from erlang"}. >t2j:t2jp(T). {"Temp":"data from erlang")
您可以使用my tuple to json module或许多其他方法之一。
toe950273#
您可以通过www.example.com转换Temphttp://erlang.org/doc/man/erlang.html#list_to_binary-1然后做同样的事。
hc8w905p4#
我会避免通过字符串连接生成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结构,比如不是字符串的键。
4条答案
按热度按时间btxsgosb1#
为了生成JSON,你一定要使用JSON库中的一个,它比你自己的代码测试得更好。我可以推荐纯Erlang jsone或NIF jiffy。不要忘记,它们中的每一个都需要将你的术语转换为正确的结构。
vawmfj5a2#
您可以使用my tuple to json module或许多其他方法之一。
toe950273#
您可以通过www.example.com转换Temphttp://erlang.org/doc/man/erlang.html#list_to_binary-1
然后做同样的事。
hc8w905p4#
我会避免通过字符串连接生成JSON。除非您非常仔细地验证输入,否则很可能有人(有意或无意)偷偷地将引号插入字符串中,从而破坏所有内容。
如果您要解析和生成JSON,我建议您使用一个用于Erlang的开源JSON库。
如果您只需要生成JSON,那么您可能不需要一个库。未经测试的代码,可能有很多错误)**:
注意,这个实现允许一些无效的JSON结构,比如不是字符串的键。