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

Python:如何从现有JSON对象提取指定元素构建新JSON对象

解决JSON提取元素时的TypeError问题

听起来你是在处理JSON数据精简时遇到了类型混淆的坑——那个TypeError: list indices must be integers or slices, not str报错,本质是你把列表(list)当成字典(dict)来用字符串索引了:列表只能用整数下标(比如list[0])或者切片来访问元素,而字典才是用字符串键(比如dict["key"])取值的。

我来给你一步步梳理正确的做法,结合你能单独访问元素的情况,应该能快速解决:

第一步:确认解析后的数据类型

先搞清楚你从JSON文件解析出来的到底是字典还是列表。可以先打印类型看看:

import json

# 先读取并解析原始JSON
with open("原始文件.json", "r", encoding="utf-8") as f:
    data = json.load(f)

# 打印类型,确认是dict还是list
print(type(data))

第二步:根据数据类型提取元素并构建新JSON

情况1:原始数据是字典(JSON对象,用{}包裹)

如果type(data)输出是<class 'dict'>,那直接提取需要的键值对就行:

# 定义你要保留的4个键
keys_to_keep = ["键1", "键2", "键3", "键4"]  # 替换成你实际需要的键名

# 方法1:手动构建新字典
new_json = {
    "键1": data["键1"],
    "键2": data["键2"],
    "键3": data["键3"],
    "键4": data["键4"]
}

# 方法2:用字典推导式更简洁(推荐)
new_json = {key: data[key] for key in keys_to_keep}

# 写入新的JSON文件
with open("精简后的JSON.json", "w", encoding="utf-8") as f:
    json.dump(new_json, f, ensure_ascii=False, indent=4)

情况2:原始数据是列表(JSON数组,用[]包裹)

如果type(data)输出是<class 'list'>,说明原始JSON是一组对象的集合,你需要遍历每个对象再提取字段:

keys_to_keep = ["键1", "键2", "键3", "键4"]

# 用列表推导式生成精简后的对象列表
new_json_list = [{key: item[key] for key in keys_to_keep} for item in data]

# 写入文件
with open("精简后的JSON列表.json", "w", encoding="utf-8") as f:
    json.dump(new_json_list, f, ensure_ascii=False, indent=4)

排查你之前的错误

你之前报错,大概率是不小心把列表当成了字典来用。比如原始数据是列表,但你直接写了data["键名"]——这时候就会触发那个错误,因为列表只能用整数下标(比如data[0]["键名"]来访问第一个对象的字段)。

按上面的步骤来,应该能顺利生成你需要的精简JSON并写入文件啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:27:12