Python中遍历未知结构JSON并将空字符串替换为None的实现方法
任意结构JSON空字符串转None解决方案
核心采用递归遍历实现,无需提前知晓JSON结构,兼容扁平化、多层嵌套字典/列表的所有场景。
实现逻辑
- 字典类型:遍历所有键值对,递归处理每个值后返回新字典
- 列表/元组类型:遍历所有元素,递归处理每个元素后返回新列表
- 字符串类型:判断是否为空字符串
"",是则替换为None,否则返回原值 - 其他类型(数字、布尔值、原生None等):直接返回原值不做修改
Python 代码实现
def empty_str_to_none(obj): if isinstance(obj, dict): return {k: empty_str_to_none(v) for k, v in obj.items()} elif isinstance(obj, (list, tuple)): return [empty_str_to_none(item) for item in obj] # 如果需要把全空格字符串也替换成None,保留obj.strip(),不需要就去掉 elif isinstance(obj, str) and obj == "": return None else: return obj
使用示例
import json # 加载原始JSON字符串为Python对象 raw_json = json.loads(''' { "response": { "list": [ {"key1": "val1", "key2": "val2"}, {"key3": "val3", "key4": ""} ], "data": {"key5": "val5", "key6": "", "key7": "val7"}, "key8": "val8", "key9": "val9", "key10": "val10" } } ''') # 执行替换 processed_json = empty_str_to_none(raw_json) # 输出验证结果 print(json.dumps(processed_json, indent=2, ensure_ascii=False))
注意:标准JSON规范不允许存在重复键,你示例中重复的
key10在解析时会自动保留最后出现的取值,不影响替换逻辑。
其他语言参考(JavaScript)
如果是前端处理JSON,可以用以下递归实现:
function emptyStrToNull(obj) { if (typeof obj !== 'object' || obj === null) { return obj === '' ? null : obj; } if (Array.isArray(obj)) { return obj.map(item => emptyStrToNull(item)); } const newObj = {}; for (const key in obj) { newObj[key] = emptyStrToNull(obj[key]); } return newObj; }
内容的提问来源于stack exchange,提问作者searcot jabali
相关产品推荐
相关产品推荐

