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

如何用Python3从复杂JSON提取指定数据集(不使用Pandas)

问题描述

通过URL获取了一段复杂JSON数据,需要用Python3在不使用Pandas的情况下,将['domain']['axes']['t']['values'](时间值)与['ranges']['global-radiation']['values'](全球辐射值)一一对应组合成行数据。但编写的代码运行出错:要么输出所有时间和辐射值,要么报字符串索引错误(因为把循环变量当作字典访问)。

JSON数据示例

{"type" : "Coverage", "title" : {"en" : "Grid Feature"}, "domain" : {"type" : "Domain", "domainType" : "Grid", "axes" : {"t" : {"values" : ["2023-05-08T08:00:00.000Z", ...]}, "x" : {"values" : [12.26646929541765]}, "y" : {"values" : [55.49876291703976]}}, "referencing" : [...]}, "parameters" : {"global-radiation" : {...}}, "ranges" : {"global-radiation" : {"type" : "NdArray", "values" : [4739083.5, ...]}}}

出错代码

data = requests.get(url)
binary = data.content
output = json.loads(binary)
print(output['domain']['axes']['t']['values'][1])
dates = output['domain']['axes']['t']['values']
print(output['ranges']['global-radiation']['values'][1])
globrad = output['ranges']['global-radiation']['values']
print('Records:')
for d in dates:
    print(d['domain']['axes']['t']['values'], d['ranges']['global-radiation']['values'])
问题排查与修正

错误原因

  1. 循环变量d是dates列表中的单个时间字符串,而非整个JSON字典,用d['domain']访问会触发字符串索引错误。
  2. 原代码未实现“一一对应”逻辑,只是遍历时间列表,每次试图访问整个数据集的所有值。

修正后的代码

import requests
import json

# 获取并解析JSON数据
data = requests.get(url)
output = json.loads(data.content)

# 提取时间和辐射值列表
dates = output['domain']['axes']['t']['values']
globrad_values = output['ranges']['global-radiation']['values']

# 一一对应组合输出
print('Records:')
# 使用zip配对两个列表的元素,确保时间和辐射值一一对应
for date, rad_value in zip(dates, globrad_values):
    print(f"时间: {date}, 全球辐射值: {rad_value}")

关键说明

  • 使用zip(dates, globrad_values)可将两个列表中索引位置相同的元素配对,实现一一对应。
  • 循环直接获取配对后的单个时间字符串和辐射值,避免了对字符串进行字典索引的错误操作。
  • 若两个列表长度不一致,zip会以较短的列表长度为准,如需处理长度不一致的情况,可额外添加判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:10:28