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

Python:如何将JSON字典列表中指定键值对写入JSON文件

解决JSON写入仅保留最后一个字典的问题

我懂你遇到的这个坑!之前我也踩过——每次循环处理JSON字典列表,最后写入的文件只剩最后一条数据,核心问题通常出在这两个地方:

  • 循环里用open(..., 'w')打开文件:w模式会清空文件内容再写入,每次循环都会覆盖之前的结果,最后自然只剩最后一个字典。
  • 没有把所有需要保存的键值对先整理成一个合法的JSON结构(比如列表),而是逐个写入单个字典,破坏了JSON的格式规范。

正确的解决思路

先把所有需要提取的键值对收集到一个列表(或其他合法JSON结构)里,再一次性写入到文件,而不是循环逐个写入。

修正后的代码示例

假设你要提取每个字典里的"specific_key"键值对,代码可以这么写:

import json
from os.path import dirname, join

# 1. 读取原JSON文件的字典列表
with open(join(dirname(__file__), 'text.json')) as tone_json:
    python_obj = json.load(tone_json)

# 2. 遍历所有字典,收集目标键值对
output_data = []
for item in python_obj:
    # 提取单个特定键的键值对,组成新字典加入列表
    if "specific_key" in item:  # 先判断键是否存在,避免KeyError
        output_data.append({"specific_key": item["specific_key"]})
    # 如果要提取多个键,可以用字典推导式:
    # target_keys = ["key1", "key2", "key3"]
    # output_data.append({k: item[k] for k in target_keys if k in item})

# 3. 一次性将整个列表写入新JSON文件
with open(join(dirname(__file__), 'output.json'), 'w') as out_file:
    json.dump(output_data, out_file, indent=4)  # indent参数让JSON更易读

为什么这样能解决问题?

  • 我们先把所有需要保存的内容整理成一个Python列表,这个列表对应JSON里的数组结构,是合法的JSON格式。
  • 最后用json.dump()一次性把整个列表写入文件,这样所有的键值对都会被序列化并保存,不会出现覆盖的情况。

关于“追加写入”的注意事项

如果你非要尝试追加模式(非常不推荐,因为会破坏JSON的结构完整性),你需要先读取已有文件的内容,把新元素加入后再重新写入——但这种方法容易出错,比如文件为空、格式损坏等情况,远不如先收集再整体写入可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:29:16