出于某种原因,我有一个属性,称为“引用”,它本身就是JSON字符串。
"references": {
"type": "string"
},
但是我想验证字符串是否为JSON数组(在“解码”之后):
"references": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
},
是否可以使用json模式执行此操作? JSON对象也有同样的问题。
数据示例:
{"references": "[\"ref 1\", \"ref 2\"]"}
答案 0 :(得分:1)
简短的回答是“否”,JSON Schema不知道如何表达此约束。您确实有一些选择。
选项1:contentMediaType
contentMediaType
和contentEncoding
关键字曾经是JSON Hyper-Schema规范的一部分,但在07草案中已移至JSON Schema验证规范。这些关键字用于将非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 ..."
}