Python插入JSON至MongoDB:实现无效JSON的错误捕获与提示
如何捕获JSON无效错误并提示解析失败(Python + MongoDB批量插入场景)
嘿,你已经把批量插入的核心逻辑搞定了,要处理无效JSON的话,其实只需要针对性捕获JSONDecodeError就行,我帮你调整下代码,顺便优化下异常提示的实用性:
修改后的完整代码
import sys, json, pymongo, glob from pymongo import MongoClient from bson import json_util from json.decoder import JSONDecodeError connection = MongoClient('localhost', 27017) db = connection.Mysample mycollection = db.Mynewsample folder = 'C:/ESRILKA/Cloud Team/Tmobile/JSON To CSV Files/JSON files/*.json' jsonFiles = glob.glob(folder) for file in jsonFiles: with open(file) as template: try: # 先解析JSON,失败直接进入异常块 template_dct = json.load(template) # 解析成功才执行插入 result = db.Mynewsample.insert_one(template_dct) print(f'Inserted post id {result.inserted_id} from file: {file}') except JSONDecodeError as e: # 专门处理JSON格式无效的场景,输出你要的"解析失败"提示 print(f"解析失败:文件 {file} 存在无效JSON格式,错误详情:{str(e)}") except (KeyError, TypeError) as e: # 处理JSON格式有效但数据结构不符合要求的情况 print(f"数据结构错误:文件 {file} 数据格式不匹配,错误详情:{str(e)}") except Exception as e: # 兜底处理其他未预料的异常,避免程序崩溃 print(f"插入失败:文件 {file} 发生未知错误,错误详情:{str(e)}")
关键优化点说明
- 精准捕获JSON无效异常:
json.load()解析格式错误的JSON时,会抛出JSONDecodeError(它是ValueError的子类),单独捕获这个异常就能精准识别“JSON格式无效”的场景,直接输出你需要的“解析失败”提示。 - 增加文件名定位:在提示中带上当前处理的文件名,批量处理时能快速找到出问题的文件,比原来模糊的提示实用得多。
- 分层处理异常:把不同类型的异常分开处理,避免笼统捕获掩盖问题——比如
KeyError/TypeError可能是JSON格式有效但数据字段不符合插入要求,和纯格式错误的场景区分开。 - 兜底异常保护:最后用
Exception捕获所有未预料的错误,确保程序遇到突发情况不会直接崩溃,还能输出错误信息方便排查。
额外小提示
你现在的代码逻辑已经是先验证JSON有效性再插入了——只有json.load()解析成功的情况下,才会执行insert_one操作,完美符合你“插入前验证JSON有效性”的需求。
内容的提问来源于stack exchange,提问作者Solomartian
相关产品推荐
相关产品推荐

