Skip to main content
 首页 » 编程设计

python之在 python 中解析大量嵌套的 JSON

2025年05月04日22kuangbin

我正在通过 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}] 

请您参考如下方法:

这种索引不会像在 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 的片段,实际上什么都不做。然后您尝试从列表 foo 获取键 'bar',这将引发错误。