如何移除JSON文件数组中的空对象{}?
移除JSON数组中的空对象解决方案
你的代码目前只是删除了目标对象内的SongName和Path字段,但没有将整个空对象从songs数组中移除,所以才会留下{}。以下是修改方案:
修改思路
直接过滤songs数组,只保留需要保留的对象,彻底移除目标对象,而不是先删字段再处理空对象,这样更高效也更简洁。
完整修改代码
import json with open(filename, 'r') as fp: data = json.load(fp) # 过滤掉所有SongName包含目标song的对象 filtered_songs = [] for item in data['songs']: if song not in item["SongName"]: filtered_songs.append(item) # 替换原数组 data['songs'] = filtered_songs with open(filename, 'w') as fp: json.dump(data, fp, sort_keys=True, indent=4, separators=(",", ":"))
更简洁的列表推导式写法
如果逻辑简单,用列表推导式可以一行完成过滤:
import json with open(filename, 'r') as fp: data = json.load(fp) # 直接生成新的songs数组,排除目标对象 data['songs'] = [item for item in data['songs'] if song not in item["SongName"]] with open(filename, 'w') as fp: json.dump(data, fp, sort_keys=True, indent=4, separators=(",", ":"))
额外说明
原代码中第一个循环只会记录最后一个匹配的songpath,如果存在多个匹配对象,会导致后续删除逻辑出错。上面的修改直接从根源解决问题:不需要删除字段,直接移除整个目标对象,既避免了空对象残留,也修正了原逻辑的潜在bug。
内容的提问来源于stack exchange,提问作者Giraffe
相关产品推荐
相关产品推荐

