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

Python处理JSON:移除仅含key无对应value的条目

问题:移除JSON中仅含'key'键的条目

需求说明

需要处理一段JSON数据,移除所有仅包含key键、不存在value键的条目(如示例中的Job和Mob No),其余内容保持不变。

实际输入JSON

{
  "Name": "Nelson",
  "Country": "India",
  "Main": [
    {
      "Property": "House",
      "details": [
        {
          "key": "No",
          "value": "1"
        },
        {
          "key": "Place",
          "value": "KAR"
        },
        {
          "key": "Job"
        },
        {
          "key": "Mob No"
        }
      ]
    }
  ]
}

期望输出JSON

{
  "Name": "Nelson",
  "Country": "India",
  "Main": [
    {
      "Property": "House",
      "details": [
        {
          "key": "No",
          "value": "1"
        },
        {
          "key": "Place",
          "value": "KAR"
        }
      ]
    }
  ]
}

现有代码问题分析

你写的remove_empty_values函数存在以下问题:

  • 函数没有返回值,调用后默认返回None,这是你得到None的直接原因
  • 逻辑偏离需求:你要删除的是没有value键的字典条目,但代码里在处理attributes键(原JSON里是details),且逻辑是删除空的value,不是移除缺少value的条目
  • 处理列表时仅递归遍历,没有过滤掉不符合条件的元素

正确解决方案

下面是修正后的函数,递归遍历JSON结构,过滤掉仅含key键的条目:

def remove_entries_without_value(data):
    if isinstance(data, dict):
        # 递归处理字典的每个值
        return {k: remove_entries_without_value(v) for k, v in data.items()}
    elif isinstance(data, list):
        # 过滤列表中:不是字典,或者是字典但同时包含key和value的条目
        return [
            remove_entries_without_value(item)
            for item in data
            if not (isinstance(item, dict) and "key" in item and "value" not in item)
        ]
    else:
        # 基本类型直接返回
        return data

使用示例

import json

# 加载JSON数据
input_json = '''
{
  "Name": "Nelson",
  "Country": "India",
  "Main": [
    {
      "Property": "House",
      "details": [
        {
          "key": "No",
          "value": "1"
        },
        {
          "key": "Place",
          "value": "KAR"
        },
        {
          "key": "Job"
        },
        {
          "key": "Mob No"
        }
      ]
    }
  ]
}
'''
data = json.loads(input_json)

# 处理数据
processed_data = remove_entries_without_value(data)

# 输出结果
print(json.dumps(processed_data, indent=2))

运行这段代码后,就能得到你期望的JSON输出。

内容的提问来源于stack exchange,提问作者mpr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:34:53