【发布时间】:2021-08-11 00:47:00
【问题描述】:
我在 SWI-Prolog 中有一个简单的规则,我想在 AWS Lambda 函数中实现它。
我将收到以下json 形式的事件:
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
我的问题是我只能从 atom-like 数组或 json 文件中读取,但不能以 compound 形式读取普通的 json。
我想做的是这样的:
lambda_handler(Event, Context, Response) :-
atom_json_dict(Event, Dict, []),
my_simple_rule(Dict.key1, Dict.key2, Dict.key3),
Response = '{"result": "yes"}'.
my_simple_rule 是一个根据传递的值返回真或假的条件。
到目前为止我尝试的方法不起作用,因为 SWI-Prolog 在使用 atom_json_term/3、json_read/2,3 或 json_read_dict/2,3 时需要 Stream 或 String。
我也尝试通过这种方式将 JSON 强制转换为字符串:
format(atom(A), "~w", {"key1": "value1", "key2": "value2", "key3":"value3"}).
期待这一点,以便我可以将其转换为Term(Prolog dict):
{"key1": "value1", "key2": "value2", "key3":"value3"}
但结果如下:
'{key1:value1,key2:value2,key3:value3}'
失败了。
有人知道我如何在 Prolog 中使用纯 JSON 吗?
【问题讨论】:
-
我有点困惑,哪个谓词失败了?
atom_json_dict? -
首先,确定
Event参数所采用的形式。如果您在控制台中运行 SWI-Prolog,请将write_canonical(Event)放入 lambda_handler/3,然后发布您看到的文本 -
@CapelliC 是我认识的最好的人之一,可以帮助您使用 SWI-Prolog 解决现实世界的 JSON 问题。如果您想得到答案,那么我建议您帮助他解决他需要帮助您的任何事情。
-
感谢您的回复。 @CapelliC,当我尝试使用
write_canonical(Event)时,结果如下:{','(:("key1","value1"),','(:("key2","value2"),:("key3","value3")))}。我尝试直接在 Lambda 中运行它,但我无法在日志中看到打印。
标签: json prolog swi-prolog