如何在Python中正确判断JSON文件里的ITEM子键是否存在?
问题描述
需要编写Python代码判断JSON文件中是否存在指定子键ITEM,需求如下:
- 若
ITEM子键存在,继续执行后续代码; - 若
ITEM子键不存在,终止程序。
现有代码无法正常工作:
with open('C:/files/response.json') as json_file: data = json.load(json_file) if 'XMLRESPONSE' in data and data['XMLRESPONSE']['ITEM']: print("key exist in JSON data") else: print("Key doesn't exist in JSON data") input ("Press any key")
JSON示例
存在ITEM子键的情况
{ "XMLRESPONSE": { "ITEM": { "PARTNUM": "876666", "UNITPRICE": "$1.50", "ITEMNO": "55667", "VENDORITEMNO": "1206613", "DESCRIPTION": "tests", "VENDORDESCR": "test", "ERP": "$1,999.00", "REBATEVALUE": "$0.00", "REBATEENDDATE": null, "ISNONSTOCK": "false", "ISFACTORYDIRECT": "false", "FREEFRT": "true", "RESTRICTED": "false", "BRANCHQTY": [ { "BRANCH": "test", "QTY": "0", "INSTOCKDATE": null }, { "BRANCH": "test", "QTY": "2", "INSTOCKDATE": null }, { "BRANCH": "test", "QTY": "5", "INSTOCKDATE": null }, { "BRANCH": "test", "QTY": "0", "INSTOCKDATE": null } ], "TOTALQTY": "7" }, "STATUS": "success" } }
不存在ITEM子键的情况
{"XMLRESPONSE": {"MESSAGE": "Invalid Item Number", "STATUS": "failure"}}
解决方案
原代码的问题在于:当XMLRESPONSE存在但ITEM不存在时,直接访问data['XMLRESPONSE']['ITEM']会抛出KeyError,无法进入else分支。需要修改判断逻辑,先确认XMLRESPONSE存在,再检查ITEM是否是它的键。
修改后的代码:
import json with open('C:/files/response.json') as json_file: data = json.load(json_file) # 先检查XMLRESPONSE存在,再检查ITEM是否在其键中 if 'XMLRESPONSE' in data and 'ITEM' in data['XMLRESPONSE']: print("key exist in JSON data") # 在这里添加后续执行的代码 else: print("Key doesn't exist in JSON data") # 终止程序,导入sys模块后调用exit import sys sys.exit() input("Press any key")
说明
- 使用
'ITEM' in data['XMLRESPONSE']判断键是否存在,避免直接取值触发异常; - 若要终止程序,在else分支调用
sys.exit()即可,注意需先导入sys模块; - 也可以用更灵活的
get()方法实现:if data.get('XMLRESPONSE', {}).get('ITEM') is not None,但直接检查键存在的方式更直观。
内容的提问来源于stack exchange,提问作者Alex Co
相关产品推荐
相关产品推荐

