如何用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)
关键说明
- 必须深入到嵌套的对象层级:先定位到
person数组,再逐个处理数组里的每个对象 - 遍历字典时不能直接删除键:先把要删除的键收集到列表中,再批量删除,避免遍历过程中修改字典结构引发异常
- 匹配正确的空值类型:如果你的场景中还有其他空值情况(比如
None、空数组[]),可以修改判断条件为if not v(注意0、False等会被误判,需根据实际需求调整)
对你的疑问的直接回答:是的,需要针对不同层级的键值对单独检查,而且要匹配实际的空值类型,不能只检查最外层或者用错误的空值判断条件
内容的提问来源于stack exchange,提问作者SachinJ
相关产品推荐
相关产品推荐

