是否有更好的方法在Python中访问深度嵌套的类似JSON的对象?

时间:2019-01-08 22:49:27

标签: python json

我经常不得不处理深度嵌套的JSON响应。一种访问元素的方法可能是这样的:

json_['foo'][0][1]['bar'][3]

但这显然根本不安全。一种解决方案是使用Python get的{​​{1}}方法并将dict作为默认参数传递。

{}

但这又会引发IndexError异常,使我每次访问列表元素时都要进行长度检查。

json_.get('foo', {})[0][1]['bar'][3]

那根本不漂亮。那么,有没有更好的解决方案呢?

2 个答案:

答案 0 :(得分:5)

只需将整个内容包装在try/except中:

try:
    return json_['foo'][0][1]['bar'][3]
except IndexError, KeyError:
    return None

答案 1 :(得分:1)

添加到其他答案中,如果您只想忽略可以使用的异常:

# Wrap this in a function
try:
    return json_['foo'][0][1]['bar'][3]
except (KeyError, IndexError):
    pass

另外,另一种抑制异常的方法是使用contextlib.suppress()

from contextlib import suppress

# Wrap this in a function
with suppress(KeyError, IndexError):
    return json_['foo'][0][1]['bar'][3]