检查JSON键是否为空

5

我希望能够检查JSON键是否为空,然后根据结果让脚本退出。

我有以下JSON:

{
    "changed": false,
    "results": []
}

如果“results”键为空,就像上面那样,我希望脚本以返回代码0的方式退出,否则应该返回1。
我已经尝试过。
import json, sys

obj=json.load(sys.stdin)

if obj["results"]=="":
    exit(0)
else:
    exit(1)

但是这会产生以下内容:
IndexError: list index out of range

如果 obj 中没有 'results',那么是这样的吗?我猜测代码会变成 sys.exit(int(not 'results' in obj))。我有点困惑你问题的标题是什么意思,所以我不确定你真正想要的答案是什么。 - Jon Clements
1
您发布的代码不可能抛出该异常。请提供一个包含完整回溯信息的有效 [MCVE] 示例。 - Martijn Pieters
请注意,对于给定的 JSON,obj['result'] 将产生 [],而不是 "",因此条件不成立。 - Martijn Pieters
抱歉,我把它和我即将发布的另一个问题搞混了,我会更新标题。 - Adam Chance
2个回答

20

检查键的存在性和其长度:

import json, sys

obj=json.load(sys.stdin)

if not 'results' in obj or len(obj['results']) == 0:
    exit(0)
else:
    exit(1)

5
如果不是obj.get('results'),代码将更加简洁。然而,问题不清楚,因为问题中没有列表访问,所以异常是没有意义的。 - Martijn Pieters
是的,你说得对。 - Thiago Rossener
1
谢谢,@MartijnPieters 修改后的解决方案可行。 - Adam Chance

1
import json, sys

obj=json.load(sys.stdin)

if len(obj["results"])==0:
    exit(0)
else:
    exit(1)

尝试使用 obj["results"] 的长度。

1
如果键不存在,您将没有对象来检查其长度 - 因此,这将产生与 OP 目前收到的相同的错误。 - Jon Clements

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接