javascript - 使用字符串将 Erlang 映射编码为 JSON 以便通过 Javascript 进行解析?

标签 javascript json erlang jiffy

我正在尝试获取像这样的 Erlang map

#{"breakfast" => "leftovers"}

并编码为 JSON 映射。

例如,我尝试使用 jiffy 转换列表

(<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f783829999929bb7c6c5c0d9c7d9c7d9c6" rel="noreferrer noopener nofollow">[email protected]</a>)27> binary_to_list(jiffy:encode(["alpha", "beta"] )).
"[[97,108,112,104,97],[98,101,116,97]]"

但我不确定如何将其转换为 JSON 对象。

当我尝试转换 map 时,我收到“invalid_member_key

(<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1561607b7b7079552427223b253b253b24" rel="noreferrer noopener nofollow">[email protected]</a>)28> jiffy:encode(#{"breakfast" => "egg sandwhich"}).
** exception throw: {error,{invalid_object_member_key,"breakfast"}}
     in function  jiffy:encode/2 (src/jiffy.erl, line 97)

我尝试了列表的漂亮格式化程序,并且得到了换行符

(<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4a3e3f24242f260a7b787d647a647a647b" rel="noreferrer noopener nofollow">[email protected]</a>)31> binary_to_list(jiffy:encode(["alpha", "beta"], [pretty] )).
"[\n  [\n    97,\n    108,\n    112,\n    104,\n    97\n  ],\n  [\n    98,\n    101,\n    116,\n    97\n  ]\n]"

为什么这不起作用? json_object 是

-type json_object() :: {[{json_string(),json_value()}]}
                        | #{json_string() => json_value()}.

所以我期待 map 转换能够正常工作。我尝试搜索并找到了读取 JSON 的示例,但没有找到将 Erlang 转换为可读 JSON 的有效示例。

最佳答案

问题在于,在 Erlang 中,字符串 "hello" 只是一个整数列表。将 Erlang 映射编码为 JSON 的库将字符串解释为 JSON 列表,这就是您在输出中获得整数列表的原因。

为了获取 JSON 字符串,您需要使用 Erlang 二进制文件作为映射中的值:

Food = #{<<"breakfast">> => <<"leftovers">>},
jiffy:encode(Food).
%%= <<"{ \"breakfast\" : \"leftovers\" }">>

jiffy 是一致的,因此它也会将 JSON 字符串解码为 Erlang 二进制文件,您在使用 jiffy:decode/1 时需要考虑到这一点。

关于javascript - 使用字符串将 Erlang 映射编码为 JSON 以便通过 Javascript 进行解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42044491/

相关文章:

erlang - 在Erlang中,当一个进程的邮箱增长较大时,它的运行速度会变慢,为什么?

erlang - 为什么在 Erlang 中搜索众多二进制文件之一比使用 `binary:match` 只搜索一个二进制文件更快?

javascript - 在上下文切换上重新应用单击绑定(bind)

javascript - 从另一个模式中启动模式窗口

ios - 如何将新数据附加到现有的 JSON 数组 (swiftyJSON)

javascript - Nodejs : read nested json independent

javascript - Joomla 3.4.1更改网站语言时更改变量

javascript - 获取动态生成的 ID

jquery - JSON 控制台显示对象,但在使用 Vue.js 后给出未定义的属性错误

c - Erlang 端口示例