解决python读取json格式数据后提取object不存在报错KeyError

本文介绍了在Python中安全获取字典值的两种常见方法:使用`dict.get()`和使用`try...except`块。示例代码展示了如何在键不存在时返回默认值,确保程序不会因 KeyError 而中断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一

使用dict.get()

if __name__ == '__main__':
    import json

    employee = '{"id":"000", "name": "111", "department":"222"}'
    employee_dict = json.loads(employee)
    print(employee_dict.get('dont exist'))  # None
    print(employee_dict.get('dont exist', '不存在'))  # 不存在

方法二

使用try包裹,例

if __name__ == '__main__':
    import json

    employee = '{"id":"000", "name": "111", "department":"222"}'
    employee_dict = json.loads(employee)
    try:
        others = employee_dict['other']
    except Exception as e:
        others = 'dont exist'
    print(others)
### 解析并提取 JSON 对象中的特定数据 对于从 JSON 文件或字符串中提取特定数据的任务,可以采用多种方法来实现这一目标。当面对简单的单层结构时,可以直接利用 Python 的 `json` 库加载 JSON 数据,并通过键名访问对应的值[^1]。 然而,在处理更复杂的多层嵌套 JSON 结构时,则可能需要用到循环或者其他方式深入遍历整个 JSON 树状结构以获取所需的信息。下面提供了一个通用的例子展示如何解析来自文件以及字符串形式的 JSON 并从中抽取指定路径下的元素: #### 方法一:直接访问已知键 (适用于简单情况) 如果知道确切的目标字段名称及其所在层次位置,那么最简便的方式就是按照常规字典操作来进行检索: ```python import json s = '{"aescCityList": null, "cityAllList": null}' data = json.loads(s) # 将 JSON 字符串转换成 Python 字典 print(data.get("aescCityList")) # 输出 None 或者其他预期的结果 ``` 这种方法适合于那些具有固定模式的小型 JSON 文档。 #### 方法二:封装读取 JSON 函数 (针对两层结构) 为了提高代码复用性和可维护性,可以通过定义一个专门用于读取和解析 JSON 文件内某些特定部分的功能模块。这里给出一段能够处理双层嵌套 JSON 的例子[^2]: ```python def parse_json(file_path, key1, key2): result_list = [] try: with open(file_path, 'r', encoding='utf8') as file_object: content = json.load(file_object) for item in content.values(): pair = (item[key1], item[key2]) result_list.append(pair) except Exception as e: print(f"Error occurred while parsing {file_path}: ", str(e)) return result_list if __name__ == '__main__': accounts_info = parse_json('login_account.json', 'username', 'pwd') print(accounts_info) ``` 这段程序会打开给定路径下的 JSON 文件,并尝试根据传入参数提取每条记录里两个预设属性组成的元组列表。 #### 方法三:使用 JSONPath 表达式 (推荐用于复杂场景) 当遇到深层级或多分支的选择需求时,借助第三方库如 `jsonpath-ng` 可极大地方便开发人员精准定位到想要的数据节点。安装该扩展之后即可执行如下命令完成高级别的筛选工作[^3]: 首先需安装依赖: ```bash pip install jsonpath_ng ``` 接着可以在脚本内部这样调用: ```python from jsonpath_ng.ext import parse # 假设有这样一个 JSON 片段... json_data = { "store": { "book": [ {"category": "fiction", "title": "The Great Gatsby"}, {"category": "non-fiction", "title": "Sapiens"} ], "bicycle": {"color": "red", "price": 19.95} } } match_expr = '$..book[?(@.category=="fiction")]' expr = parse(match_expr) matches = expr.find(json_data) for match in matches: print(match.value['title']) # 打印匹配项的具体内容 ``` 上述实例展示了怎样运用 JSONPath 查询语句 `$..book[?(@.category=="fiction")]` 来查找所有类别为 fiction 类型书籍的相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值