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

在Python中有没有更好的方法来访问深度嵌套的类似JSON的对象?,python,json,Python,Json,我经常需要处理访问深度嵌套的JSON响应。访问元素的一种方法可以是这样的: json_['foo'][0][1]['bar'][3] 但这显然一点也不安全。一种解决方案是使用Python的get方法dict并将{}作为默认参数 json_.get('foo', {})[0][1]['bar'][3] 但这又会引发一个索引器异常,让我对每个列表元素访问进行长度检查 target = json_.get('foo', {}) if not target: return target = t

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

json_['foo'][0][1]['bar'][3]
但这显然一点也不安全。一种解决方案是使用Python的
get
方法
dict
并将
{}
作为默认参数

json_.get('foo', {})[0][1]['bar'][3]
但这又会引发一个索引器异常,让我对每个列表元素访问进行长度检查

target = json_.get('foo', {})
if not target:
   return
target = target[0]
if len(target) < 2:
   return
target = target[1].get('bar', {})
if len(target) < 4:
   return
target = target[3]   #Finally...
target=json_quo;.get('foo',{})
如果不是目标:
回来
目标=目标[0]
如果len(目标)<2:
回来
target=target[1]。获取('bar',{})
如果len(目标)<4:
回来
目标=目标[3]#最后。。。

这一点也不漂亮。那么,有更好的解决方案吗?

只需将整个问题包装在
try/except
中即可:

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

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

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

在另一个答案的基础上,如果您只想忽略例外情况,可以使用:

# Wrap this in a function
try:
    return json_['foo'][0][1]['bar'][3]
except (KeyError, IndexError):
    pass
另外,另一种抑制异常的方法是:


在另一个答案的基础上,如果您只想忽略例外情况,可以使用:

# Wrap this in a function
try:
    return json_['foo'][0][1]['bar'][3]
except (KeyError, IndexError):
    pass
另外,另一种抑制异常的方法是:


如果返回
None
是一个选项,为什么不
try:json_u['foo'][0][1]['bar'][3];除了KeyError,indexer:pass
?如果返回
None
是一个选项,为什么不
try:json_uj0][1][bar][3];除KeyError外,索引器:通过