如何从erlang JSON中获取特定值

时间:2016-06-06 06:35:37

标签: erlang

我关注GCM

{[
    {<<"multicast_id">>,888},
    {<<"success">>,0},
    {<<"failure">>,1},
    {<<"canonical_ids">>,0},
        {<<"results">>,
            [
                {
                    [
                        {<<"error">>,<<"NotRegistered">>}
                    ]
                }
            ]
        }
]}

我正在尝试阅读&#34; NotRegistered&#34;。但我无法找到方法来阅读它。

我如何阅读&#34; NotRegistered&#34;?

我试过

result_from(Json) ->
    {
      proplists:get_value(<<"multicast_id">>, Json),
      proplists:get_value(<<"success">>, Json),
      proplists:get_value(<<"failure">>, Json),
      proplists:get_value(<<"canonical_ids">>, Json),
      proplists:get_value(<<"results">>, Json)
    }.

但是我得到了一个例外

  

CRASH REPORT退出0个邻居的进程'',原因是:no   函数子句匹配proplists:get_value(<<"results">>,{[{<<"multicast_id">>,888},{<<"success">>,0},{<<"failure">>,1},{<<"canonical_ids">>,...},...]}, undefined)第874行中的p1_server:terminate/7行226

1 个答案:

答案 0 :(得分:4)

首先,这不是JSON,而是大多数JSON库用作最佳转换为JSON和从JSON转换的结构的数据结构。正式这是一个javadoc,其中包含一个元素:列表。

您收到此错误,因为get_value函数没有您的参数的子句,这意味着其中一个参数可能格式错误。错误是正确的,因为Json参数的类型是错误的。

Json变量不是一个proplist。将结构转换为(prop)列表,如下所示:

{List} = Json,

然后使用它作为proplists:get_value的第二个参数。

第二个参数必须是tuple()的列表ie。类型为[property()],但您提供的是{[property()]}