【发布时间】:2018-01-08 15:46:49
【问题描述】:
我正在尝试在 prolog 中创建这个谓词:
谓词
json_get/3可以定义为:json_get(JSON_obj, Fields, Result).当Result可通过以下方式恢复时为真 从JSON_obj开始的Fields(列表)中的字段链。一个领域 由N表示(N主编号 o 等于 0)对应于 JSON 数组的索引。
请帮助我理解遵循字段链。
谢谢
编辑1:
当然,所以 json 对象看起来像这样 '{"name" : "Aretha", "surname" : "Franklin"}'。 如果我为此对象 prolog 调用 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_obj的表示形式是什么样的吗? (为什么我的脑海里会播放一首艾瑞莎·富兰克林的歌?) -
谁知道为什么 Aretha 对 Prolog 感兴趣?
标签: json prolog swi-prolog