[英]json get prolog predicate
我尝试在序言中创建此谓词:
谓词
json_get/3
可以定义为:json_get(JSON_obj, Fields, Result).
通过遵循从JSON_obj
开始的Fields
(列表)中的Fields
链来恢复Result
时,这是正确的。 由N
表示的字段(N
的主要数字o等于0)对应于JSON数组的索引。
请帮助我了解遵循领域链。
谢谢
编辑1:
当然,所以json对象看起来像这样的'{“ name”:“ Aretha”,“ surname”:“ Franklin”}“。 如果我将此对象的序言调用json_parse谓词,请向我显示
json_obj([(”name”, ”Aretha”), (”surname”, ”Franklin”)])
,我们称为obj O
使用json_get
我需要以这种方式从O中提取名称, json_get(O, ["name"], R)
编辑2:
在某人的帮助下,这是现在的谓词:
json_get(json_obj(JSON_obj), Field, Result) :-
memberchk((Field,Result), JSON_obj).
json_get(JSON_obj, Fields, Result) :-
maplist(json_get(JSON_obj), Fields, Result).
所以现在的问题是嵌套列表。 例如,此输入
json_parse('{"nome" : "Zaphod",
"heads" : ["Head1", "Head2"]}', Z),
json_get(Z, ["heads", 1], R).
输出应为R = "Head2"
但谓词不会提取该字段并失败。
编辑3:
这是json_parse的输出
json_obj([("nome", "Zaphod"), ("heads", json_array(["Head1", "Head2"]))]).
这个怎么样
json_get(json_obj(Obj),[F|Fs],Res) :-
member((F,R),Obj),
json_get(R,Fs,Res).
json_get(json_array(Is),[N|Fs],Res) :-
nth1(N,Is,R),
json_get(R,Fs,Res).
json_get(Res,[],Res).
这将在第二个示例中生成Head1
而不是Head2
。 如果您不只是打错字,请说明该怎么做。 (如果从零开始,则可以将nth1/3
更改为nth0/3
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.