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

如何用Python移除JSON中的空值键并更新原test.json文件?

问题:移除JSON中空值字段并更新文件

我有一个test.json文件,内容如下:

{
    "person": [
        {
            "requestId": "0",
            "name": "ABC",
            "age" : 30,
            "city": ""
        }
    ]
}

由于city字段值为空字符串,我希望将其从JSON中移除,得到如下结构:

{
    "person": [
        {
            "requestId": "0",
            "name": "ABC",
            "age" : 30
        }
    ]
}

同时需要更新原test.json文件,但编写的代码未能成功移除该字段:

with open('test.json') as f:
    json_dict = json.load(f)
for key in json_dict:
    if json_dict[key] is None:
        json_dict.pop(key)

请问是否需要单独检查键对应的值?


解决方案

你的代码有两个核心问题:

  • 只遍历了JSON最外层的键(也就是person),但空值字段在person数组内部的对象里,根本没触及到目标层级
  • 判断条件是值为None,但目标字段的值是空字符串"",条件完全不匹配

要解决这个问题,需要针对嵌套结构做层级遍历,并且匹配实际的空值类型,完整代码如下:

import json

# 读取原始JSON文件
with open('test.json', 'r') as f:
    data = json.load(f)

# 遍历person数组中的每个对象
for item in data['person']:
    # 收集所有值为空字符串的键(可根据需求扩展其他空值类型,比如None、[]等)
    empty_keys = [k for k, v in item.items() if v == ""]
    # 删除这些空值字段
    for k in empty_keys:
        del item[k]

# 将修改后的数据写回原文件,保持格式化
with open('test.json', 'w') as f:
    json.dump(data, f, indent=4)

关键说明

  1. 必须深入到嵌套的对象层级:先定位到person数组,再逐个处理数组里的每个对象
  2. 遍历字典时不能直接删除键:先把要删除的键收集到列表中,再批量删除,避免遍历过程中修改字典结构引发异常
  3. 匹配正确的空值类型:如果你的场景中还有其他空值情况(比如None、空数组[]),可以修改判断条件为if not v(注意0、False等会被误判,需根据实际需求调整)

对你的疑问的直接回答:是的,需要针对不同层级的键值对单独检查,而且要匹配实际的空值类型,不能只检查最外层或者用错误的空值判断条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:06:02