json get prolog predicate



我试图在prolog中创建这个谓词:

谓词json_get/3可以定义为:json_get(JSON_obj, Fields, Result).Result可通过以下方式恢复时为 true。Fields(列表)中的字段链(从JSON_obj开始。一个字段 用N表示(N主数 o 等于 0)对应于 JSON 数组的索引。

请帮助我理解遵循字段链。

谢谢

编辑1:

当然,所以 json 对象看起来像这样 '{"name" : "Aretha", "surname" : "Franklin"}'。 如果我调用json_parse这个对象的谓词 Prolog 告诉我这个

json_obj([(”name”, ”Aretha”), (”surname”, ”Franklin”)]),我们称之为 objO

有了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).

这会产生第二个示例中未Head2Head1。请解释一下这应该如何工作,如果你不只是打错字。(如果它是从零开始的,您可以将nth1/3更改为nth0/3

最新更新