[英]Is there a better way to access deeply nested JSON-like objects in Python?
我经常不得不处理访问深度嵌套的JSON响应。 一种访问元素的方法可能是这样的:
json_['foo'][0][1]['bar'][3]
但这显然是不安全的。 一种解决方案是使用Python dict
的get
方法并将{}
作为默认参数传递。
json_.get('foo', {})[0][1]['bar'][3]
但这又会引发IndexError异常,使我需要对每个列表元素访问进行长度检查。
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...
那一点也不漂亮。 那么,有没有更好的解决方案呢?
只需将整个内容包装在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
另外,抑制异常的另一种方法是使用contextlib.suppress()
:
from contextlib import suppress
# Wrap this in a function
with suppress(KeyError, IndexError):
return json_['foo'][0][1]['bar'][3]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.