关于python:如果json字符串中不存在属性,如何返回空字符串?

How to return empty string if property doesn't exist in the JSON string?

本问题已经有最佳答案,请猛点这里访问。

我有一个JSON字符串,我正尝试使用python从中提取属性值,如下所示:

1
2
3
4
5
def extract_property(node, to_extract):
    data, stat = zk.get(node)
    jsonString = data.decode("utf-8")
    jStr = json.loads(jsonString)
    return jStr[to_extract]

现在可能了,我尝试提取的属性值不存在于JSON字符串中,因此它将失败。如果JSON字符串中根本不存在属性,我如何返回空字符串。

如果属性不存在,此行可能失败。

1
return jStr[to_extract]


和Zaur一样,我也会建议使用jStr.get(to_extract, ''),但我认为OP对此的反对意见是,jStr可能是或可能不是dict(如果是dict),那么.get()将在python 2或3中工作)。如果这是问题所在,那么以下可能涵盖更广泛的案例:

1
2
try: return jStr[to_extract]
except: return ''

只需使用dict.get(),即:

1
return jStr.get(to_extract, '')

有关详细信息,请参阅https://docs.python.org/3/library/stdtypes.html dict.get。

UPD:

多亏@jez指出,jStr不一定是一本字典。然而,JSON解析的结果是已知的:如果它不是一个字典,那么它是一个列表、数字或字符串。在这种情况下,将其包装成一个类型检查例程,例如:

1
2
3
4
try:
    return jStr[to_extract]
except (KeyError, AttributeError):
    return ''