使用Python验证JSON数组中所有对象的指定键是否存在
JSON数组键验证失败的原因与修复方案
问题场景
你有如下JSON数组数据:
data = """ [ { "id": 1, "name": "crm/index", "description": "CRM/Dashboard" }, { "id": 2, "name": "crm/index/with_search", "description": "CRM/Global Search" } ]"""
想要验证数组里的每个对象都包含id、name、description三个键,但用以下代码验证时,执行了else分支,提示键不存在:
import json # 注:原代码漏了这行,直接运行会报错 student = json.loads(data) if "id" in student: print("Key exist in JSON data") else: print("Key doesn't exist in JSON data")
错误原因
json.loads(data)解析后得到的是一个列表(数组),里面的每个元素才是包含id等键的字典。你直接判断"id"是否在这个列表里,相当于检查列表的元素是不是字符串"id",显然不成立,所以走到了else分支。
正确的验证代码
需要遍历列表中的每个对象,逐个检查是否包含所需的三个键:
import json data = """ [ { "id": 1, "name": "crm/index", "description": "CRM/Dashboard" }, { "id": 2, "name": "crm/index/with_search", "description": "CRM/Global Search" } ]""" items = json.loads(data) required_keys = {"id", "name", "description"} all_valid = True for item in items: if not required_keys.issubset(item.keys()): all_valid = False print(f"对象 {item} 缺少必要的键") if all_valid: print("所有对象都包含id、name、description三个键") else: print("存在对象缺少必要的键")
内容的提问来源于stack exchange,提问作者Taimoor Pasha
相关产品推荐
相关产品推荐

