繁体   English   中英

json获取序言谓词

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM