Python:从解码后的JSON数据中移除空值([]和"")
如何在Python 2.7中移除JSON里值为[]和""的键值对?
嘿,作为Python 2.7的新手,我完全懂你想清理JSON数据的需求!咱们一步步来搞定这个问题。
首先明确你的输入和目标:
你加载后的原始数据是这样的:
json_decoded = { "data": { "keyA": [ { "subkeyA1": "valueA1", "subkeyA2": "valueA2" }, { "subkeyA3": "" } ], "keyB": [] } }
想要得到的清理后结果是:
json_decoded = { "data": { "keyA": [ { "subkeyA1": "valueA1", "subkeyA2": "valueA2" } ] } }
解决方案:递归清理嵌套结构
因为你的JSON数据是多层嵌套的(字典里套列表,列表里又套字典),直接用循环很难处理所有层级,所以我们写一个递归函数来逐层遍历并清理空值,新手也能轻松看懂。
这里是可以直接运行的代码:
import json def clean_empty_values(obj): # 处理字典类型:遍历所有键值对,只保留非空的项 if isinstance(obj, dict): cleaned_dict = {} for key, value in obj.items(): # 先递归清理当前值 cleaned_val = clean_empty_values(value) # 只保留清理后不是空字符串、空列表的键值对 if cleaned_val not in [None, "", []]: cleaned_dict[key] = cleaned_val return cleaned_dict # 处理列表类型:清理每个元素,再移除空元素 elif isinstance(obj, list): cleaned_items = [] for item in obj: cleaned_item = clean_empty_values(item) # 只保留清理后非空的元素 if cleaned_item not in [None, "", []]: cleaned_items.append(cleaned_item) return cleaned_items # 其他类型(字符串、数字等)直接返回原内容 else: return obj
怎么使用这个函数?
操作超简单,直接把你加载好的json_decoded传进去就行:
# 假设你已经通过json.load(file)得到了json_decoded cleaned_data = clean_empty_values(json_decoded) # 格式化打印结果,看起来更清晰 print(json.dumps(cleaned_data, indent=2))
为什么这个方法管用?
- 递归函数会自动深入每一层嵌套结构,不管是字典里的列表,还是列表里的字典,都能处理到;
- 对于字典,先清理每个值,再过滤掉清理后为空的键值对;
- 对于列表,先清理每个元素,再把清理后变成空的元素从列表里删掉;
- 完全适配Python 2.7版本,没有语法兼容性问题。
运行这段代码后,你就能得到想要的干净数据啦!
内容的提问来源于stack exchange,提问作者Backo




