Python3如何校验JSON的items数组中是否存在传入的指定name值
解决方案
核心逻辑说明
- 接口返回的JSON反序列化后是标准Python字典,直接通过键名
items即可访问目标数组,不需要遍历所有顶层键值对 - 命令行传入的参数通过
sys.argv获取,索引0为当前脚本文件名,第一个自定义参数从索引1开始取 - 匹配逻辑只需要遍历
items数组内的每个字典,校验其name字段值是否等于传入的目标值即可
完整实现代码
import sys import json # 保留原有接口请求逻辑 res = conn.getresponse() data = res.read() outputdata = data.decode("utf-8") outputdata1 = json.loads(outputdata) # 参数校验:判断是否传入了待匹配的name值 if len(sys.argv) < 2: raise ValueError("运行时必须传入待匹配的name参数,示例:python script.py pythontest34") target_name = sys.argv[1] # 访问items层级并做匹配,any函数遇到第一个匹配项就会返回True,性能更好 match_result = any(item.get('name') == target_name for item in outputdata1.get('items', [])) # 最终结果存储在match_result变量中,匹配成功为True,失败为False print(match_result)
运行方式
在命令行执行脚本时,把要查找的name值拼在命令后面即可,例如要查找pythontest34是否存在:
python your_script_name.py pythontest34
执行后会直接打印匹配结果True,如果传入不存在的name值则返回False。
代码说明
- 用
dict.get()方法取值做了容错,即使接口返回没有items键、或者某个item没有name字段,也不会抛出KeyError异常 - 用内置
any()函数替代手写循环判断,写法更简洁,且遍历到第一个匹配项就会终止遍历,比全量遍历效率高 - 加了参数长度校验,避免漏传参数导致的索引报错
内容的提问来源于stack exchange,提问作者asp
相关产品推荐
相关产品推荐

