我是 Erlang
的新手并注意到没有从列表中创建 json 字符串的 native 函数(或者有吗?)。我使用这种方法在 Erlang 中创建 json 字符串,但不知道它是否会故障。
这是我的方法的一个例子:
-module(index).
-export([test/0]).
test() ->
Ma = "Hello World", Mb = "Hello Erlang",
A = "{\"Messages\" : [\"" ++ Ma ++ "\", \""++Mb++"\"], \"Usernames\" : [\"Username1\", \"Username2\"]}",
A.
结果是:
388> test().
"{\"Messages\" : [\"Hello World\", \"Hello Erlang\"], \"Usernames\" : [\"Username1\", \"Username2\"]}"
389>
我认为这是预期的结果,但是当包含特殊字符时,此方法是否有可能出现故障,例如:<, >, & / \ " ?
?
我应该采取什么预防措施来使这种方法更强大?
最佳答案
如果Ma
或 Mb
包含双引号或任何控制字符,从字符串到 JSON 的解析将失败。这种解析可能永远不会在 Erlang 中发生,因为 Erlang 没有内置的字符串到 JSON 转换。
使用二进制文件 ( <<"I am a binary string">>
) 是个好主意,因为列表会消耗更多资源。
我们正在使用 jiffy ,实现为 NIF因此速度相当快,它允许像这样构建文档:
jiffy:decode(<<"{\"foo\": \"bar\"}">>).
{[{<<"foo">>,<<"bar">>}]}
Doc = {[{foo, [<<"bing">>, 2.3, true]}]}.
{[{foo,[<<"bing">>,2.3,true]}]}
jiffy:encode(Doc).
<<"{\"foo\":[\"bing\",2.3,true]}">>
关于json - 如何在 Erlang 中手动创建 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37597151/