You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动