Json 架构:是否可以验证字符串是 JSON 数组或对象?
Json schema: is it possible to validate a string is a JSON array or object?
出于某种原因,我有一个 属性,比如说 "references",它本身就是一个 JSON 字符串。
"references": {
"type": "string"
},
但我想验证字符串是一个 JSON 数组(在 "decoding" 之后):
"references": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
},
是否可以使用 json 模式来做到这一点? JSON 个对象的相同问题。
数据示例:
{"references": "[\"ref 1\", \"ref 2\"]"}
简短的回答是否定的,JSON Schema 不知道如何表达这个约束。你确实有几个选择。
选项 1:contentMediaType
contentMediaType
和 contentEncoding
关键字曾经是 JSON Hyper-Schema 规范的一部分,但在草案中被移至 JSON 架构验证规范- 07.这些关键字用于将非 JSON 内容描述为字符串。但是,我看不出为什么不能使用它来将 JSON 数据也描述为字符串。这只是部分解决方案,因为它只强制字符串是 JSON 而不是 JSON 数组。此外,您可能很难找到支持此功能的验证器(部分原因是它是新的,部分原因是它是一个不常见的用例)
{
"type": "string",
"contentEncoding": "utf-8",
"contentMediaType": "application/json"
}
http://json-schema.org/latest/json-schema-validation.html#rfc.section.8
选项 2:自定义 format
一些验证器允许您为 format
关键字定义自定义格式。这样做的缺点是您受限于特定的实现。
{
"type": "string",
"format": "json-array"
}
选项 3:pattern
我什至不确定这个是否可行,但您可以尝试想出一个与您正在寻找的 JSON 结构相匹配的正则表达式。
{
"type": "string",
"pattern": "... some god awful regex that probably won't work anyway ..."
}
出于某种原因,我有一个 属性,比如说 "references",它本身就是一个 JSON 字符串。
"references": {
"type": "string"
},
但我想验证字符串是一个 JSON 数组(在 "decoding" 之后):
"references": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
},
是否可以使用 json 模式来做到这一点? JSON 个对象的相同问题。
数据示例:
{"references": "[\"ref 1\", \"ref 2\"]"}
简短的回答是否定的,JSON Schema 不知道如何表达这个约束。你确实有几个选择。
选项 1:contentMediaType
contentMediaType
和 contentEncoding
关键字曾经是 JSON Hyper-Schema 规范的一部分,但在草案中被移至 JSON 架构验证规范- 07.这些关键字用于将非 JSON 内容描述为字符串。但是,我看不出为什么不能使用它来将 JSON 数据也描述为字符串。这只是部分解决方案,因为它只强制字符串是 JSON 而不是 JSON 数组。此外,您可能很难找到支持此功能的验证器(部分原因是它是新的,部分原因是它是一个不常见的用例)
{
"type": "string",
"contentEncoding": "utf-8",
"contentMediaType": "application/json"
}
http://json-schema.org/latest/json-schema-validation.html#rfc.section.8
选项 2:自定义 format
一些验证器允许您为 format
关键字定义自定义格式。这样做的缺点是您受限于特定的实现。
{
"type": "string",
"format": "json-array"
}
选项 3:pattern
我什至不确定这个是否可行,但您可以尝试想出一个与您正在寻找的 JSON 结构相匹配的正则表达式。
{
"type": "string",
"pattern": "... some god awful regex that probably won't work anyway ..."
}