(如果存在)从Python 3.6获取结构化JSON中的元素

时间:2018-03-11 23:25:34

标签: python json python-3.x

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:字符串索引必须是整数

2 个答案:

答案 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()的密钥值。

如果没有列表或没有nameIndexError密钥,这可能会引发KeyErrorpersons个例外,但您可以使用name块处理此问题在iBug的回答中概述。