【问题标题】:How to return empty string if property doesn't exist in the JSON string? [duplicate]如果 JSON 字符串中不存在属性,如何返回空字符串? [复制]
【发布时间】:2017-02-20 11:49:26
【问题描述】:

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

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 字符串中根本不存在属性,如何返回空字符串。

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

return jStr[to_extract]

【问题讨论】:

  • if to_extract in jStr:
  • 你不能去if jStr[to_extract]: return jStr[to_extract] else: return None
  • @MooingRawr 如果属性不存在,也会出现同样的错误。
  • @barmar 我明白了,每天都会学到一些新东西,出于某种原因,我认为 JSON 对象很特殊,如果找不到该属性,则不会返回任何内容。现在想来,这似乎很愚蠢。
  • @MooingRawr 没有 JSON 对象这样的东西。 JSON 是数据结构的字符串表示形式。解码后,它只是一种本机数据类型。在本例中,它是一个 Python 字典。

标签: python json


【解决方案1】:

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

return jStr.get(to_extract, '')

更多详情请见https://docs.python.org/3/library/stdtypes.html#dict.get

更新:

感谢@jez 指出,jStr 不能保证是字典。但是,JSON 解析的结果是已知的:如果它不是字典,那么它是一个列表、数字或字符串。在这种情况下,将其包装到类型检查例程中,例如:

try:
    return jStr[to_extract]
except (KeyError, AttributeError):
    return ''

【讨论】:

  • 这会做什么?你能解释一下我的理解吗?
  • 链接的文档看起来很简单
  • 这是 Python 3 的特性吗?它根本不适合我。我在 2.7.3 上,无法升级。
  • 不,这从一开始就存在。
【解决方案2】:

像 Zaur 一样,我也会建议 jStr.get(to_extract, ''),但我认为 OP 对此的反对意见是 jStr 可能也可能不是 dict(如果它是 @987654324 @,然后 .get() 将在 Python 2 或 3 中工作)。如果这是问题所在,那么以下可能涵盖更广泛的情况:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多