jsonschema - 使用 JSON Schema,如何验证事先不知道键和值的对象?
问题描述
我需要验证这种格式:
{
"variables": {
"team": "red",
"L3_HCU_TESTS": "N",
"dbo_user": "user",
"version": 920
}
}
我事先不知道键和值的名称。
“变量”不是强制性的,但如果提供,键可以是任何字符串,值可以是任何值。对我来说重要的是验证“变量”(如果提供者)将包括键和值。不允许空值
解决方案
对于 JSON 对象,键必须是字符串,因此您对基于字符串的键的要求已包含在“有效 JSON”中。
扩展您的要求,您希望:
- “变量”必须是一个对象
- 对象中必须至少有一个属性
- 属性的值不能为空
这是满足这些要求的架构:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"variables": {
"type": "object",
"minProperties": 1,
"additionalProperties": {
"not": {
"type": "null"
}
}
}
}
}
您可以使用此链接针对您的实例对其进行测试。
"type": "object"
确保“变量”是一个对象。
"minProperties"
确保对象中有最少数量的属性。
"additionalProperties"
值子模式应用于对象中的所有键值(因为未定义“属性”和“模式属性”)。子模式反转子模式的结果,它定义类型必须为空。反转结果,必须为 NOT NULL。
我没有看到minProperties
经常使用。这是该 JSON Schema 关键字的参考链接:https ://datatracker.ietf.org/doc/html/draft-handrews-json-schema-validation-01#section-6.5.2
推荐阅读
- swiftui - 由于 NavigationLink 多次调用 SwiftUI onAppear
- python - 如何在 Tkinter 中打开同一文件的多个窗口?
- c - 为什么登录Oracle会泄漏内存?
- python - 在 DataFrame 中过滤数据时收到警告
- python - 检查框架是否已存在于框架列表中
- django - Twilio 出站呼叫保持断开被叫方
- java - 在 Spring、Hibernate 和 PostgreSQL 中插入时在列中生成时间戳
- c# - 在模式中重用 DTO 时在 NSwag 中显示不同的示例值
- python-3.x - 如何将 .txt 文件传递给 Python 中的参数?
- java - 如何打乱数组并将它们放入缓冲图像中