如何使用Python以流式方式验证JSON与JSON Schema的一致性(无需加载整个对象到内存)
如何使用Python以流式方式验证JSON与JSON Schema的一致性(无需加载整个对象到内存)
我有一个很大的JSON文件,不想把它全部加载到内存里,希望能以流式的方式验证它是否符合JSON Schema。目前我找到的库,比如Pydantic或者jsonschema,都只能验证完全加载到内存的JSON对象。我需要的是一种可以分块喂入原始JSON数据、能控制缓冲区大小的验证方式。
我设想的实现方式大概是这样的:
import pydantic # 我用的是V2版本 import ijson import pathlib class A(pydantic.BaseModel): i: int a: list[int] s: str jsonpath = pathlib.Path("some.json") validator = MyValidator(schema=A.model_json_schema()) with jsonpath.open("rb") as file: for prefix, event, value in ijson.parse(file, use_float=True): validator.event((prefix, event, value)) print(validator.errors)
假设some.json是一个约50MB的A实例,里面包含一个非常长的数组。我不想把整个对象加载到内存(这是Pydantic默认的做法),但要确保这个JSON文件符合A的Schema。validator.errors可以返回错误列表,如果没有错误的话就是空列表。
[编辑于2025-01-31]
这里的“流式方式”指的是每个事件只会被处理一次,无法回头重新处理。不过如果有需要多次扫描文件的验证方案,我也可以接受——比如示例里允许对文件进行多次扫描。
备注:内容来源于stack exchange,提问作者Anton Daneyko
相关产品推荐
相关产品推荐

