我有一个如下所示的元组列表:
{[{<<"id">>,1},
{<<"alerts_count">>,0},
{<<"username">>,<<"santiagopoli">>},
{<<"facebook_name">>,<<"Santiago Ignacio Poli">>},
{<<"lives">>,{[{<<"quantity">>,8},
{<<"max">>,8},
{<<"unlimited">>,true}]}}]}
我想知道如何从该元组中提取属性。例如:
get_value("id",TupleList), %% should return 1.
get_value("facebook_name",TupleList), %% should return "Santiago Ignacio Poli".
get_value("lives"), %% should return another TupleList, so i can call
get_value("quantity",get_value("lives",TupleList)).
我试图匹配所有&#34;属性&#34;到一个名为&#34; User&#34;但我不知道该怎么做。
更具体一点:我使用Jiffy库(github.com/davisp/jiffy)来解析JSON。现在我想从该JSON获取一个值。
谢谢!
答案 0 :(得分:2)
第一个奇怪的事情是元组包含单个项目列表:[{Key, Value}]
无条件地嵌入{}
。因此,让我们将您编写的所有内容作为名为Stuff
的变量引用,并将其拉出来:
{KVList} = Stuff
良好的开端。现在我们正在处理{Key, Value}
类型列表。完成后,我们现在可以做到:
lists:keyfind(<<"id">>, 1, KVList)
或者:
proplists:get_value(<<"id">>, KVList)
...我们会得到您提出的第一个答案。 (注意在你从这里复制一些代码之前,如果Key不在KVList中,两者可能返回的区别......)。
对这种特殊问题的进一步研究分为两个截然不同的领域:
{Key, Value}
函数的数据函数的Erlang文档(提示:lists
,proplists
,orddict
以及基于相同概念的任何其他模块都是好的研究的候选人,所有在标准库中),包括基本过滤器和地图。答案 1 :(得分:0)
您应该查看proplists module及其proplist:get_value/2
功能。
您只需要考虑当列表中不存在Key
时它应该如何表现(或者是默认的支持者行为满足)。
还有两个笔记:
<<"id">>
proplists在列表上工作,但是您呈现的数据列在一个元素元组中。所以你需要提取这个Data
。
{PropList} = Data,
Id = proplists:get_value(<<"id">>, PropList),