当前位置: 首页 > news >正文

jsonschema - 校验Json内容和格式

1、创建对象

from pydantic import BaseModel
from typing import Listclass Person(BaseModel):name: strage: intclass Student(Person): level: int = 16friends: List[Person]  

2、生成 schema

schema = Student.model_json_schema()

内容如下

{'$defs': {'Person': {'properties': {'name': {'title': 'Name', 'type': 'string'}, 'age': {'title': 'Age', 'type': 'integer'}}, 'required': ['name', 'age'], 'title': 'Person', 'type': 'object'}}, 'properties': {'name': {'title': 'Name', 'type': 'string'}, 'age': {'title': 'Age', 'type': 'integer'}, 'level': {'title': 'Level', 'type': 'integer'}, 'friends': {'items': {'$ref': '#/$defs/Person'}, 'title': 'Friends', 'type': 'array'}}, 'required': ['name', 'age', 'level', 'friends'], 'title': 'Student', 'type': 'object'} 

3、生成测试数据

对象转 json 字符串


fre0 = Person(age=15, name='alice') 
fre1 = Person(age=17, name='Allen') stu = Student(age=15, name='Betty', level = 3, friends = [fre0, fre1]) d1 = stu.__dict__
print(d1) # {'name': 'Betty', 'age': 15, 'level': 3, 'friends': {name='alice', age=15}, Person(name='Allen', age=17)]}import json 
json.dumps(d1, default=lambda obj:obj.__dict__, sort_keys=True, indent=4 )  # Object of type Person is not JSON serializable
json_str = '''
{"age": 15, "friends": [{"age": 15, "name": "alice"}, {"age": 17, "name": "Allen"}], "level": 3, "name": "Betty"}
'''

4、校验 validate

d2 = json.loads(json_str)schema = {'$defs': {'Person': {'properties': {'name': {'title': 'Name', 'type': 'string'}, 'age': {'title': 'Age', 'type': 'integer'}}, 'required': ['name', 'age'], 'title': 'Person', 'type': 'object'}}, 'properties': {'name': {'title': 'Name', 'type': 'string'}, 'age': {'title': 'Age', 'type': 'integer'}, 'level': {'title': 'Level', 'type': 'integer'}, 'friends': {'items': {'$ref': '#/$defs/Person'}, 'title': 'Friends', 'type': 'array'}}, 'required': ['name', 'age', 'level', 'friends'], 'title': 'Student', 'type': 'object'}from jsonschema import validatetry:ret = validate(instance=d2, schema=schema)print(ret) # 返回 None 代表没问题 if ret == None:print('-- json 格式符合')else:print('xx json 格式不符合') 
except Exception as err:print('xx json 验证失败 ')

5、错误情况

以上json 没问题,如果把 json 数据 或字典 故意处理为错误的数据类型,或格式,如下:

{"age": 15, "friends": [{"age": 15, "name": "alice"}, {"age": 17, "name": "Allen"}], "level": 3, "name": 12} 

validate 会报出 Error

Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/Users/xxx/python3.11/site-packages/jsonschema/validators.py", line 1332, in validateraise error
jsonschema.exceptions.ValidationError: 12 is not of type 'string'Failed validating 'type' in schema['properties']['name']:{'title': 'Name', 'type': 'string'}On instance['name']:12

2024-09-20(六)

相关文章:

jsonschema - 校验Json内容和格式

1、创建对象 from pydantic import BaseModel from typing import Listclass Person(BaseModel):name: strage: intclass Student(Person): level: int 16friends: List[Person] 2、生成 schema schema Student.model_json_schema()内容如下 {$defs: {Person: {propertie…...

浅谈计算机视觉新手的学习路径

浅谈计算机视觉新手的学习路径 计算机视觉是人工智能领域的一个重要分支&#xff0c;它的研究目标是使计算机能够理解和解释我们视觉可以看到的所有外界世界信息。对于一个计算机视觉领域的新人&#xff0c;学习计算机视觉大致可以分为几个步骤&#xff0c;包括理论基础、实际…...

SQL编程题复习(24/9/19)

练习题 x25 10-145 查询S001学生选修而S003学生未选修的课程&#xff08;MSSQL&#xff09;10-146 检索出 sc表中至少选修了’C001’与’C002’课程的学生学号10-147 查询平均分高于60分的课程&#xff08;MSSQL&#xff09;10-148 检索C002号课程的成绩最高的二人学号&#xf…...

提前解锁 Vue 3.5 的新特性

Vue 3.5 是 Vue.js 新发布的版本&#xff0c;虽然没有引入重大变更&#xff0c;但带来了许多实用的增强功能、内部优化和性能改进。 1. 响应式系统优化 Vue 3.5 进一步优化了响应式系统的性能&#xff0c;并且减少内存占用。尤其在处理大型或深度嵌套的响应式数组时&#xff…...

web基础—dvwa靶场(十)XSS

XSS(DOM) 跨站点脚本&#xff08;XSS&#xff09;攻击是一种注入攻击&#xff0c;恶意脚本会被注入到可信的网站中。当攻击者使用 web 应用程序将恶意代码&#xff08;通常以浏览器端脚本的形式&#xff09;发送给其他最终用户时&#xff0c;就会发生 XSS 攻击。允许这些攻击成…...

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(五)-聚合

聚合 聚合基于Query结果的统计&#xff0c;执行过程是搜索的一部分&#xff0c;Onesearch支持0代码构建聚合&#xff0c;聚合目前完全在引擎层 0代码聚合 上图是聚合的配置&#xff0c;包括2个pdm文档聚合统计 termsOfExt term桶聚合&#xff0c;统计ext&#xff0c;如&…...

Pandas中df常用方法介绍

目录 常用方法df.columnsdf.indexdf.valuesdf.Tdf.sort_index()df.sort_values() 案例 常用方法 df.columns df.columns 是 Pandas 中 DataFrame 对象的一个属性&#xff0c;用于获取 DataFrame 中的列标签&#xff08;列名&#xff09;。 基本语法如下&#xff1a; df.col…...

LabVIEW中AVI帧转图像数据

在LabVIEW中&#xff0c;有时需要将AVI视频文件的帧转换为图像数据进行进一步处理。下面详细讲解了如何从AVI视频提取单帧并将其转换为图像数据集群&#xff0c;以便与其他图像处理VI兼容。 问题背景&#xff1a; 用户已经拥有能够处理JPEG图像数据集群的VI&#xff0c;现在希…...

并发与并行的区别:深入理解Go语言中的核心概念

在编程中,并发与并行的区别往往被忽视或误解。很多开发者在谈论这两个概念时,常常把它们混为一谈,认为它们都指“多个任务同时运行”。但实际上,这种说法并不完全正确。如果我们深入探讨并发和并行的区别,会发现它不仅是词语上的不同,更是编程中非常重要的抽象层次,特别…...

小小扑克牌算法

1.定义一个扑克牌类Card&#xff1a; package democard; public class Card {public String suit;//表示花色public int rank;//表示牌点数Overridepublic String toString() {return "{"suit rank"}";}//实例方法&#xff0c;初始化牌的点数和花色public…...

【第34章】Spring Cloud之SkyWalking分布式日志

文章目录 前言一、准备1. 引入依赖 二、日志配置1. 打印追踪ID2. gRPC 导出 三、完整日志配置四、日志展示1. 前端2. 后端 总结 前言 前面已经完成了请求的链路追踪&#xff0c;这里我们通过SkyWalking来处理分布式日志&#xff1b; 场景描述&#xff1a;我们有三个服务消费者…...

easy-es动态索引支持

背景 很多项目目前都引入了es&#xff0c;由于es弥补了mysql存储及搜索查询的局限性&#xff0c;随着技术的不断迭代&#xff0c;原生的es客户端使用比较繁琐不直观&#xff0c;上手代价有点大&#xff0c;所以easy-es框架就面世了&#xff0c;学习成本很低&#xff0c;有空大…...

SWC(Speedy Web Compiler)

概述 SWC 由 Rust 编写&#xff0c; 既可用于编译&#xff0c;也可用于打包。 对于编译&#xff0c;它使用现代 JavaScript 功能获取 JavaScript / TypeScript 文件并输出所有主流浏览器支持的有效代码。 SWC在单线程上比 Babel 快 20 倍&#xff0c;在四核上快 70 倍。 简…...

【计算机网络】传输层协议UDP

目录 一、端口号1.1 端口号范围划分1.2 认识知名端口号 二、UDP协议2.1 UDP协议端格式2.2 UDP的特点2.3 UDP的缓冲区2.4 UDP使用注意事项2.5 基于UDP的应用层协议 一、端口号 传输层协议负责数据的传输&#xff0c;从发送端到接收端。端口号标识一个主机上进行通信的不同的应用…...

Docker+PyCharm远程调试环境隔离解决方案

DockerPyCharmMiniconda实现深度学习代码远程调试和环境隔离 本文详细介绍了如何在局域网环境下&#xff0c;利用Docker、PyCharm和Miniconda构建一个高效的深度学习远程调试平台。首先在服务器&#xff08;server&#xff09;上&#xff0c;通过Docker构建包含不同CUDA环境的镜…...

数字化转型的理论框架对比:从多维视角指导企业成功变革对比DPBOKIT4ITCOBITTOGAF

数字化转型的多维框架解析 在数字化时代&#xff0c;企业如何有效实现数字化转型已成为其生存和发展的关键问题。然而&#xff0c;市场上关于数字化管理的各种框架和理论并存&#xff0c;企业需要根据自身的需求选择最适合的指导路径。本文将通过对几个核心理论框架的对比&…...

【C++掌中宝】深入解析C++命名空间:有效管理代码的利器

文章目录 前言1. namespace 的价值2. namespace 的定义3. 命名空间的本质4. 嵌套的命名空间5. 命名空间的使用6. using 指令7. 补充结语 前言 假设这样一种情况&#xff0c;当一个班上有两个名叫 Zara 的学生时&#xff0c;为了明确区分它们&#xff0c;我们在使用名字之外&am…...

2024/9/21 leetcode 21.合并两个有序链表 2.两数相加

目录 21.合并两个有序链表 题目描述 题目链接 解题思路与代码 2.两数相加 题目描述 题目链接 解题思路与代码 --------------------------------------------------------------------------- 21.合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返…...

Python学习的主要知识框架

Python的主要学习知识点非常广泛且深入&#xff0c;但我可以为您概括一些核心的学习领域&#xff0c;帮助您系统地掌握Python编程。以下是Python学习的主要知识框架&#xff1a; 1. Python基础语法 数据类型&#xff1a;整数、浮点数、字符串、布尔值、列表、元组、字典、集合…...

LLaMA-Factory 使用 alpaca 格式的数据集

LLaMA-Factory 使用 alpaca 格式的数据集 flyfish alpaca 格式最初与Stanford大学的一个研究项目相关联&#xff0c;该项目旨在通过少量高质量的数据来微调大型语言模型。它受到了Alpaca模型&#xff08;一种基于LLaMA的指令跟随模型&#xff09;的影响&#xff0c;该模型是在…...

实战指南:如何快速解决WebApi在IIS部署中的HTTP 500.19配置错误

1. 遇到HTTP 500.19错误时先别慌 第一次把WebApi部署到IIS服务器就遇到HTTP 500.19错误&#xff0c;相信很多开发者都会心头一紧。这个错误通常伴随着"配置数据无效"的提示&#xff0c;看起来挺吓人&#xff0c;但实际上解决起来并不复杂。我刚开始接触IIS部署时也踩…...

避坑指南:在YOLOv5-7.0中融合BiFPN时,如何平衡P2检测头带来的精度与速度损耗?

YOLOv5-7.0中BiFPN与P2检测头的精度与速度平衡实战 当你在无人机航拍画面中寻找几毫米大小的电子元件时&#xff0c;或者在显微镜图像中定位细胞核位置时&#xff0c;传统目标检测模型的性能往往会大打折扣。这正是微小目标检测技术大显身手的场景——而YOLOv5作为工业界最受欢…...

深度学习篇---全局平均池化(Global Average Pooling, GAP)

全局平均池化是深度学习中一个优雅而强大的操作&#xff0c;它通过极简的设计解决了全连接层参数量爆炸的问题&#xff0c;同时增强了模型的泛化能力。 一、什么是全局平均池化&#xff1f; 1. 基本定义 全局平均池化是对每个特征通道的所有空间位置取平均值&#xff0c;将三…...

PyTorch 2.8镜像实操手册:Git+vim+htop+screen开发运维一体化工作流

PyTorch 2.8镜像实操手册&#xff1a;Gitvimhtopscreen开发运维一体化工作流 1. 镜像概述与环境准备 PyTorch 2.8深度学习镜像是一个为专业开发者打造的全功能工作环境&#xff0c;基于RTX 4090D 24GB显卡和CUDA 12.4进行了深度优化。这个镜像不仅预装了最新版的PyTorch框架&…...

手把手教你用STM32F103C8T6+DHT11做个智能加湿器(附完整代码和PCB文件)

从零打造智能加湿器&#xff1a;STM32F103C8T6与DHT11的完美组合 在干燥的秋冬季节&#xff0c;一台能够自动调节湿度的智能加湿器不仅能提升生活舒适度&#xff0c;更是电子爱好者展示技能的绝佳项目。本文将带你从元器件选型开始&#xff0c;逐步完成一个基于STM32F103C8T6单…...

三菱现代自动擦窗机器人PLC软件:后发产品介绍及技术细节

三菱 现代自动擦窗机器人PLC软件 我们主要的后发送的产品有&#xff0c;带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面 界面多种组态可供选择上周刚帮一个三菱现代贴牌擦窗机的小客户把新软件迭代完&#xff0c;顺便攒了一套带人话解释的梯形图、不…...

【Polars 2.0企业级数据清洗黄金法则】:5大生产环境避坑指南+实测性能提升3.7倍基准报告

第一章&#xff1a;Polars 2.0企业级数据清洗黄金法则总览Polars 2.0 以零拷贝语义、并行执行引擎与原生 Arrow 内存布局为核心&#xff0c;重构了企业级数据清洗的性能边界与工程可靠性。其惰性 API 与 eager 模式无缝协同&#xff0c;使复杂清洗流水线既可交互调试&#xff0…...

FastAPI + TinyDB并发陷阱与实战:告别数据错乱的解决方案

核心摘要本文针对在FastAPI框架下使用TinyDB&#xff08;JSON文件数据库&#xff09;时遇到的并发写入数据冲突、错乱问题&#xff0c;深入浅出地解释了问题根源&#xff0c;并提供了从“文件锁”到“内存队列”再到“乐观锁”的三种由浅入深的实战解决方案&#xff0c;帮助你根…...

千问3.5-9B提示词工程:优化OpenClaw任务拆解质量

千问3.5-9B提示词工程&#xff1a;优化OpenClaw任务拆解质量 1. 为什么需要优化提示词 去年冬天第一次用OpenClaw自动整理会议纪要时&#xff0c;我被它的"耿直"气笑了——让它"提取关键结论"&#xff0c;结果给我返回了整段录音的文字版&#xff0c;连&…...

电散热器为何能适配多场景采暖?

一、设备概述&#xff1a;3kW 220V电散热器的核心定位3kW 220V电散热器是一款功率适中、电压适配家用及小型商用场景的便捷采暖设备&#xff0c;凭借无需复杂管道铺设、即开即热的优势&#xff0c;成为现代采暖的热门选择。其额定功率3kW、额定电压220V&#xff0c;适配家庭、办…...