You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从大型JSON中按指定键值快速提取目标字段?

如何快速从大型JSON数组中获取指定条目标段值?

我有一个包含上千条数据的大型JSON数组,需要从中获取2条指定条目里quotes->ASK->time字段的值。已知目标条目的name和symbol键值对,但不知道它们在数组中的位置。目前用遍历数组的方法能实现,但只拿2个值的话效率太低,想问问有没有不用循环遍历全部条目、能直接像parsed["symbol":"kalo"]["quotes"]["ASK"]["time"]这种方式直接取值的办法。

示例代码

x = requests.get('http://example.org/data.json')
parsed = x.json()

gettime= str(parsed[0]["quotes"]["ASK"]["time"])
print(gettime)

示例JSON结构

[
  {
    "id": "nem-cri",
    "name": "nemlaaoo",
    "symbol": "nem",
    "rank": 27,
    "owner": "marcel",
    "quotes": {
      "ASK": {
        "price": 19429,
        "time": 319250866,
        "duration": 21
      }
    }
  },
  {"id": "kalo-lo-leek", "name": "kalowaaa", "symbol": "kalo", "rank": 122, "owner": "daniel", "quotes": {"ASK": {"price": 12928, "time": 937282932, "duration": 9}}},
  {"id": "reewmaarwl", "name": "reeqooow", "symbol": "reeq", "rank": 4, "owner": "eric", "quotes": {"ASK": {"price": 9989, "time": 124288222, "duration": 19}}},
  {"id": "sharkooaksj", "name": "sharkmaaa", "symbol": "shark", "rank": 22, "owner": "eric", "quotes": {"ASK": {"price": 11122, "time": 482773882, "duration": 22}}}
]

解决方案

首先明确:不存在直接通过parsed["symbol":"kalo"]这种语法直接取值的方法,因为原始数据是数组结构,不是以symbol为键的字典。要实现快速查找,最优方案是先把数组转换成以目标键(或键组合)为索引的字典,后续就能直接O(1)时间取值。

方法1:以symbol为键构建映射字典

如果symbol在数组中是唯一的,可以用它作为键构建字典,只需要遍历一次数组,之后就能直接取值:

import requests

x = requests.get('http://example.org/data.json')
parsed = x.json()

# 一次性遍历数组,构建symbol到条目映射
symbol_map = {item['symbol']: item for item in parsed}

# 直接获取指定symbol的time值
kalo_time = symbol_map['kalo']['quotes']['ASK']['time']
nem_time = symbol_map['nem']['quotes']['ASK']['time']

print(kalo_time, nem_time)

方法2:以name+symbol组合为键构建映射字典

如果symbol可能存在重复,用(name, symbol)组合作为键,确保唯一性:

import requests

x = requests.get('http://example.org/data.json')
parsed = x.json()

# 构建name+symbol组合到条目的映射
name_symbol_map = {(item['name'], item['symbol']): item for item in parsed}

# 通过name和symbol组合获取目标time值
target_time = name_symbol_map[('kalowaaa', 'kalo')]['quotes']['ASK']['time']
print(target_time)

补充说明

  • 第一次构建映射字典必须遍历一次数组,但这是不可避免的——因为原始数据是无序数组,系统无法直接定位到指定条目。但遍历一次后,后续不管取多少个值都能直接获取,比每次需要取值都遍历数组高效得多。
  • 如果你只需要取2个值,虽然还是要遍历一次数组,但这是当前场景下的最优解,没有更高效的方式了。

内容的提问来源于stack exchange,提问作者MickyB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:50:25