如何在 JSON 中编写“anyOf”语句?

在 JSON 中,anyOf 语句通常用于 JSON Schema(JSON 模式)中,来定义多个可能的模式,表示数据可以匹配多个子模式中的任意一个。这种功能常用于验证 JSON 数据是否符合某一组可能的条件之一。

在这里插入图片描述

1、问题背景

问题:如何编写 JSON 使其符合给定的 JSON Schema 结构?在 JSON Schema 中,存在一个“anyOf”关键字,要求至少满足一个条件。

2、解决方案

为了符合给定的 JSON Schema 结构,需要对 JSON 进行以下修改:

  • 使用anyOf关键字可以确保至少满足一个条件。
special_needs = [{"main": ["learning"],"sub": ["ADD/ADHD"]},{"main": ["behavioral"]}
]
  • mainsub属性需要放在同一个对象中。
special_needs = [{"category_0": {"main": ["learning"],"sub": ["ADD/ADHD", "dyslexia", "general learning disability", "language disorder", "intellectual giftedness", "other"]}},{"category_1": {"main": ["mental"],"sub": ["down's syndrome", "asperger's syndrome", "autism", "other"]}},{"category_2": {"main": ["behavioral"]}},{"category_3": {"main": ["medical"],"sub": ["diabetes", "allergies", "eating disorders", "chronic illness", "other"]}},{"category_4": {"main": ["physical"],"sub": ["blind", "deaf", "cerebral palsy", "other"]}}
]
  • 将JSON中的dict改为[],这样才符合anyOf中的要求。
special_needs = [{"category_0": {"main": ["learning"],"sub": ["ADD/ADHD", "dyslexia", "general learning disability", "language disorder", "intellectual giftedness", "other"]}},{"category_1": {"main": ["mental"],"sub": ["down's syndrome", "asperger's syndrome", "autism", "other"]}},{"category_2": {"main": ["behavioral"]}},{"category_3": {"main": ["medical"],"sub": ["diabetes", "allergies", "eating disorders", "chronic illness", "other"]}},{"category_4": {"main": ["physical"],"sub": ["blind", "deaf", "cerebral palsy", "other"]}}
]
  • anyOf仅适用于数组类型,因此special_needs应该是一个数组。
special_needs = [{"category_0": {"main": ["learning"],"sub": ["ADD/ADHD", "dyslexia", "general learning disability", "language disorder", "intellectual giftedness", "other"]}},{"category_1": {"main": ["mental"],"sub": ["down's syndrome", "asperger's syndrome", "autism", "other"]}},{"category_2": {"main": ["behavioral"]}},{"category_3": {"main": ["medical"],"sub": ["diabetes", "allergies", "eating disorders", "chronic illness", "other"]}},{"category_4": {"main": ["physical"],"sub": ["blind", "deaf", "cerebral palsy", "other"]}}
]

代码示例:

import json# 创建一个包含“anyOf”关键字的 JSON Schema
schema = {"$schema": "http://json-schema.org/draft-04/schema#","type": "object","properties": {"special_needs": {"type": "array","items": {"anyOf": [{"properties": {"category_0": {"type": "object","properties": {"main": {"type": "array","items": {"type": "string","enum": ["learning"]}},"sub": {"type": "array","items": {"type": "string","enum": ["ADD/ADHD", "dyslexia", "general learning disability", "language disorder", "intellectual giftedness", "other"]}}}}}},{"properties": {"category_1": {"type": "object","properties": {"main": {"type": "array","items": {"type": "string","enum": ["mental"]}},"sub": {"type": "array","items": {"type": "string","enum": ["down's syndrome", "asperger's syndrome", "autism", "other"]}}}}}},{"properties": {"category_2": {"type": "object","properties": {"main": {"type": "array","items": {"type": "string","enum": ["behavioral"]}}}}}},{"properties": {"category_3": {"type": "object","properties": {"main": {"type": "array","items": {"type": "string","enum": ["medical"]}},"sub": {"type": "array","items": {"type": "string","enum": ["diabetes", "allergies", "eating disorders", "chronic illness", "other"]}}}}}},{"properties": {"category_4": {"type": "object","properties": {"main": {"type": "array","items": {"type": "string","enum": ["physical"]}},"sub": {"type": "array","items": {"type": "string","enum": ["blind", "deaf", "cerebral palsy", "other"]}}}}}}]}}}
}# 创建一个符合 JSON Schema 的 JSON 数据
data = {"special_needs": [{"category_0": {"main": ["learning"],"sub": ["ADD/ADHD"]}},{"category_1": {"main": ["mental"],"sub": ["down's syndrome"]}}]
}# 验证 JSON 数据是否符合 JSON Schema
validator = jsonschema.Draft4Validator(schema)
if validator.is_valid(data):print("JSON data is valid")
else:print("JSON data is invalid")# 输出 JSON 数据
print(json.dumps(data, indent=4))

运行代码输出如下:

JSON data is valid
{"special_needs": [{"category_0": {"main": ["learning"],"sub": ["ADD/ADHD"]}},{"category_1": {"main": ["mental"],"sub": ["down's syndrome"]}}]
}

总结

  • anyOf 允许定义多个可能的模式,数据只需符合其中之一即可。
  • 它在 JSON Schema 中用于灵活的验证场景,尤其当字段可以有多种可能的结构时。

这种模式非常适合需要灵活数据验证的场景,比如 API 请求的验证、表单数据的校验等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451049.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络 - 基础问题】每日 3 题(三十六)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

MongoDB 的安装详情

在虚拟机里面opt下 新建一个mongodb文件夹 再新建一个opt/mongodb/data文件夹, 然后将挂载的mongodb数据放到data文件夹里: 【把mongodb的数据挂载出来,以后我们再次重启的时候 数据起码还会在】 冒号右边 挂载到左边的路径 docker run -…

Matlab终于能够实现Transformer预测了

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 目录 原理简介 数据介绍 结果展示 完整代码 今…

ubuntu24 修改ip地址 ubuntu虚拟机修改静态ip

1. ubuntu 修改地址在/etc/netplan # 进入路径 cd /etc/netplan # 修改文件夹下的配置文件,我的是50-cloud-init.yaml. ye可能你得是20-cloud-init.yaml 2. 修改为: dhcp4: 改为false 192.168.164.50 是我自己分配的ip地址, /24 为固定写法&#xff…

数据结构与算法:堆与优先队列的深入剖析

数据结构与算法:堆与优先队列的深入剖析 堆是一种特殊的树形数据结构,广泛应用于优先队列的实现以及各种高效的算法中,如排序和图算法。通过深入了解堆的结构、不同堆的实现方式,以及堆在实际系统中的应用,我们可以掌…

初级网络工程师之从入门到入狱(四)

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 网络工程师从入门到入狱 前言一、Wlan应用实战1.1、拓扑图详解1.2、LSW11.3、AC11.4、抓包1.5、Tunnel隧道模式解析1.6、AP、…

服务器软件之Tomcat

服务器软件之Tomcat 服务器软件之Tomcat 服务器软件之Tomcat一、什么是Tomcat二、安装Tomcat1、前提:2、下载3、解压下载的tomcat4、tomcat启动常见错误4.1、tomcat8.0 startup报错java.util.logging.ErrorManager: 44.2、java.lang.UnsatisfiedLinkError 三、Tomca…

LVGL模拟器使用以及安装

LVGL模拟器介绍 LVGL模拟器:使用PC端软件模拟LVGL运行,而不需要任何嵌入式硬件。 优点:便于学习、跨平台协同开发。 我这里使用的是CodeBlocks。 环境搭建及工程获取 环境搭建 安装包获取:https://www.codeblocks.org/downlo…

vue后台管理系统从0到1搭建(4)各组件的搭建

文章目录 vue后台管理系统从0到1搭建(4)各组件的搭建Main.vue 组件的初构 vue后台管理系统从0到1搭建(4)各组件的搭建 Main.vue 组件的初构 根据我们的效果来看,分析一下,我们把左边的区域分为一个组件&am…

云计算作业一:问题解决备忘

教程地址:https://blog.csdn.net/qq_53877854/article/details/142412784 修改网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33在root用户下编辑 静态ip地址配置后查看ip与配置不符 注意:确保在这之前已经在VMware的编辑>虚拟网络编…

2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析

一、单选题 1、下列选项中关于 turtle.color(red) 语句的作用描述正确的是?( ) A. 只设置画笔的颜色为红色 B. 只设置填充的颜色为红色 C. 设置画笔和填充的颜色为红色 D. 设置画笔的颜色为红色,设置画布背景的颜色为红色 正…

Java @RequestPart注解:同时实现文件上传与JSON对象传参

RequestPart注解:用于处理multipart/form-data请求的一部分,通常用于文件上传或者处理表单中的字段。 java后端举例: PostMapping("/fileTest")public AjaxResult fileTest(RequestPart("file") MultipartFile file,Req…

【从零开始的LeetCode-算法】3099. 哈沙德数

如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number)。给你一个整数 x 。如果 x 是 哈沙德数 ,则返回 x 各个数位上的数字之和,否则,返回 -1 。 示例 1: 输入&am…

你真的了解appium吗?

背景:对于QA同学来说,appium应该都不陌生,作为市面上最流行的app自动化测试框架之一,凭借强大的扩展性、跨平台能力和活跃的社区,使得它成为了移动端自动化测试的首选。今天让我们一起重新了解下这个工具! …

关于jmeter设置为中文问题之后无法保存设置的若干问题

1、jemeter如何设置中文模式 Options--->Choose Language--->Chinese(Simplifies), 如此设置后就可显示中文模式(缺点:下次打开还是英文);如下图所示: 操作完成之后: 但是下次重启之后依旧是英文; 2、在jmeter.…

k8s jenkins 2.421动态创建slave

k8s jenkins 动态创建slave 简述使用jenkins动态slave的优势:制作jenkins-slave从节点jenkins-slave-latest:v1配置jenkins动态slave配置 Pod Template配置容器模板挂载卷 测试 简述 持续构建与发布是我们日常工作中必不可少的一个步骤,目前大多公司都采…

机器视觉基础系列四—简单了解背景建模算法

机器视觉基础系列四—简单了解背景建模算法 首先我们应该了解的是背景建模的定义是什么?又有哪些应用场景呢? 背景建模是指通过分析视频序列中的像素值变化情况,从中提取出静态背景部分,并将其用于目标检测、运动跟踪等计算机视觉…

从0开始部署优化虚拟机

一,vm workstation 安装 CentOS-7 忽略 二、查看虚拟机IP ip address 得到 192.168.196.128/24 宿主机进行Ping测试 C:\Users\Administrator>ping 192.168.196.128正在 Ping 192.168.196.128 具有 32 字节的数据: 来自 192.168.196.128 的回复: 字节32 时间…

怎么向新闻媒体发稿?携手谛道文化,轻松实现新闻媒体发稿

在纷繁复杂的信息时代,企业与个人若欲崭露头角,一套行之有效的发稿策略无疑是突破重围的利剑。企业或个人该怎么向新闻媒体发稿呢?谛道文化新闻媒体发稿机构,在软文发布、新闻发布及媒体投放等方面具有卓越策略,无疑为…

I\O进程线程(Day30)

一、学习内容 多线程基础 1> 线程是任务器调度的基本单位,是进程的一个执行单元 2> 一个进程中可以包含多个线程,但是至少要包含一个线程称为主线程 3> 一个进程中的多个线程共享进程的资源,不会为线程再 单独分配内存空间 4> 线…