在Python中有没有更好的方法来访问深度嵌套的类似JSON的对象?
我经常需要处理访问深度嵌套的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_['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外,索引器:通过
?