在this回答中我理解我可以使用GET指令捕获JSON文件的元素,如果不存在则获取None
。但我无法理解如何使用多个级别的JSON数据。
让我们看看下面的例子:
import json
json_input = '{"persons": [{"name": "Brian", "city": "Seattle"}, {"name": "David", "city": "Amsterdam"} ] }'
d = json.loads(json_input)
d.get('persons')
输出[{'name':'Brian','city':'Seattle'},{'name':'David', '城市': '阿姆斯特丹'}]
d.get('animals')
输出无
但我想用同样的方法检查d['persons'][0]['name']
是否存在,或d['persons'][0]['tel_number']
是否存在。
如果我使用d.get(['persons'][0]['name'])
,我会收到以下错误:
Traceback(最近一次调用最后一次):文件“”,第1行,in d.get(['persons'] [0] ['name'])TypeError:字符串索引必须是整数
答案 0 :(得分:1)
这看起来像是一个有效的解决方案:
def myGet(d, k1, k2, k3):
try:
return d[k1][k2][k3]
except (TypeError, IndexError, KeyError):
return None
asdfg = myGet(d, 'persons', 0, 'name')
你得到了TypeError,因为Python将['persons']
视为包含一个字符串而不是索引的列表,因此['persons'][0]
到达'persons'
,不能被另一个字符串索引。< / p>
答案 1 :(得分:1)
正确的做法是:
main.ts(38,3): error TS2322: Type '(event: MouseEvent) => void' is not assignable to type 'EventListener'.
Types of parameters 'event' and 'evt' are incompatible.
Type 'Event' is not assignable to type 'MouseEvent'.
Property 'altKey' is missing in type 'Event'.
d.get('persons')[0].get('name')
将返回给定键的值。然后我们访问其中的列表并再次尝试get()
名为get()
的密钥值。
如果没有列表或没有name
或IndexError
密钥,这可能会引发KeyError
或persons
个例外,但您可以使用name
块处理此问题在iBug的回答中概述。