在 Erlang 中解析 JSON

发布于 2024-07-25 11:41:08 字数 196 浏览 3 评论 0原文

我有一段 JSON 字符串,我想在 Erlang 中解析它。 它看起来像:

({ id1 : ["str1", "str2", "str3"], id2 : ["str4", "str5"]})

我查看了 mochijson2 和其他几个 JSON 解析器,但我真的不知道该怎么做。 非常感谢任何帮助!

I have a piece of JSON string, which I want to parse in Erlang. It looks like:

({ id1 : ["str1", "str2", "str3"], id2 : ["str4", "str5"]})

I looked at mochijson2, and a couple of other JSON parsers, but I really could not figure out how to do it. Any help greatly appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

神经暖 2024-08-01 11:41:08

我曾经使用过 erlang-json-eep-parser,并且在你的数据上尝试过。

7> json_eep:json_to_term("({ id1 : [\"str1\", \"str2\", \"str3\"], id2 : [\"str4\", \"str5\"]})").
** exception error: no match of right hand side value 
                    {error,{1,json_lex2,{illegal,"("}},1}
     in function  json_eep:json_to_term/1

是的,它不喜欢括号。

8> json_eep:json_to_term("{ id1 : [\"str1\", \"str2\", \"str3\"], id2 : [\"str4\", \"str5\"]}").
** exception error: no match of right hand side value 
                    {error,{1,json_lex2,{illegal,"i"}},1}
     in function  json_eep:json_to_term/1

而且它不喜欢不带引号的键:

18> json_eep:json_to_term("{ \"id1\" : [\"str1\", \"str2\", \"str3\"], \"id2\" : [\"str4\", \"str5\"]}").
{[{<<"id1">>,[<<"str1">>,<<"str2">>,<<"str3">>]},
  {<<"id2">>,[<<"str4">>,<<"str5">>]}]}

这样看起来更好。

所以看起来你的数据几乎是JSON,至少就这个解析器而言是这样。

I once used the erlang-json-eep-parser, and tried it on your data.

7> json_eep:json_to_term("({ id1 : [\"str1\", \"str2\", \"str3\"], id2 : [\"str4\", \"str5\"]})").
** exception error: no match of right hand side value 
                    {error,{1,json_lex2,{illegal,"("}},1}
     in function  json_eep:json_to_term/1

Right, it doesn't like the parentheses.

8> json_eep:json_to_term("{ id1 : [\"str1\", \"str2\", \"str3\"], id2 : [\"str4\", \"str5\"]}").
** exception error: no match of right hand side value 
                    {error,{1,json_lex2,{illegal,"i"}},1}
     in function  json_eep:json_to_term/1

And it doesn't like the unquoted keys:

18> json_eep:json_to_term("{ \"id1\" : [\"str1\", \"str2\", \"str3\"], \"id2\" : [\"str4\", \"str5\"]}").
{[{<<"id1">>,[<<"str1">>,<<"str2">>,<<"str3">>]},
  {<<"id2">>,[<<"str4">>,<<"str5">>]}]}

That looks better.

So it seems that your data is almost JSON, at least as far as this parser is concerned.

桜花祭 2024-08-01 11:41:08

您可以在 JSONLint 验证器上处理 JSON: http://www.jsonlint.com/

you can work on your JSON at the JSONLint validator: http://www.jsonlint.com/

一人独醉 2024-08-01 11:41:08

您的输入不完全是 JSON —— 需要引用键,如下所示:

{ "id1" : ["str1", "str2", "str3"], "id2" : ["str4", "str5"]}

用于操作 JSON 的一个好的 Erlang 库是 jsx

Your input is not quite JSON -- the keys need to be quoted, like this:

{ "id1" : ["str1", "str2", "str3"], "id2" : ["str4", "str5"]}

A good Erlang library for manipulating JSON is jsx

望喜 2024-08-01 11:41:08

您看过 http://www.json.org/ 吗?

或从这里下载“json4erlang”: json-and-json-rpc-for-erlang

Have you looked at http://www.json.org/ ?

or download "json4erlang" from here: json-and-json-rpc-for-erlang

心病无药医 2024-08-01 11:41:08

根据 https://www.ietf.org/rfc/rfc4627,您的 JSON 密钥无效。 txt。 一旦你改正它,Erlang 有很多 JSON 库,我最喜欢的是 JSX(https://github.com/jsx)。 com/talentdeficit/jsx/):

MyJSON = { "id1" : ["str1", "str2", "str3"], "id2" : ["str4", "str5"]},
jsx:decode(MyJSON, [return_maps]).

它将返回一个 Erlang 地图数据结构,可以根据您的需要进行操作 http://learnyousomeerlang.com/maps

Your JSON keys are not valid according to https://www.ietf.org/rfc/rfc4627.txt. Once you correct it, there are plenty of JSON libraries for Erlang, my favorite is JSX(https://github.com/talentdeficit/jsx/):

MyJSON = { "id1" : ["str1", "str2", "str3"], "id2" : ["str4", "str5"]},
jsx:decode(MyJSON, [return_maps]).

And it will return an Erlang map data structure that can be manipulated to your needs http://learnyousomeerlang.com/maps

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文