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
相关产品推荐
相关产品推荐

