在python中解析高度嵌套的JSON

克里斯

我正在通过API连接并提取JSON,但是无法进行解析。

我已经能够解析到以下示例级别。我想从生成的JSON列表中提取“符号”列表,但似乎只能对单个实体执行此操作。如果可能的话,我想直接这样做(即避免只使用循环)。

即,这有效:

data[0]['acct']['positions'][1]['i']['symbol']

返回此:

Out[100]: 'JNC'

但是,这并没有:

data[0]['acct']['positions'][:]['i']['symbol']

data[0]['acct']['positions'][0:3]['i']['symbol']

两者都返回以下错误:

Traceback (most recent call last):

  File "<ipython-input-105-72bbee303a08>", line 1, in <module>
    data[0]['securitiesAccount']['positions'][:]['instrument']['symbol']

TypeError: list indices must be integers or slices, not str

下面的示例JSON:

[{'a': 0.0,
  'b': 1.0,      
  'i': {'desc': 'CASH_EQUIVALENT', 'id': '9ZZZFD104', 'symbol': 'MMDA1'},
  'c': 72.64},
 {'a': 0.0,
  'b': 33.61716,      
  'i': {'desc': 'EQUITY', 'id': '78464A417', 'symbol': 'JNC'},
  'c': 39.59},
 {'a': 0.0,
  'b': 87.81473,      
  'i': {'desc': 'EQUITY', 'id': '921937793', 'symbol': 'BVV'},
  'c': 19.34}]
iz_

这种索引无法像NumPy中那样工作。您可以改为使用列表推导:

result = [record['i']['symbol'] for record in data[0]['acct']['positions'][0:3]]

显然,更改[0:3]为任何内容。如果要全部使用,则完全省略该切片。


这是您最初尝试执行的操作:

假设您有一个字典列表,如下所示:

foo = [{'bar': 1}, {'bar': 2}, {'bar': 3}]

如果您想[1, 2, 3]使用自己的方法进行访问,则类似于foo[:]['bar']但是,此表达式是从左到右求值的,foo[:]只会创建一个的切片foo,基本上什么也不做。然后,您尝试'bar'foo列表中获取密钥,这将引发错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章