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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:54:03