Json模式:是否可以验证字符串是JSON数组还是对象?

时间:2018-08-03 14:50:05

标签: jsonschema python-jsonschema

出于某种原因,我有一个属性,称为“引用”,它本身就是JSON字符串。

    "references": {
      "type": "string"
    },

但是我想验证字符串是否为JSON数组(在“解码”之后):

    "references": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uri"
      }
    },

是否可以使用json模式执行此操作? JSON对象也有同样的问题。

数据示例:

{"references": "[\"ref 1\", \"ref 2\"]"}

1 个答案:

答案 0 :(得分:1)

简短的回答是“否”,JSON Schema不知道如何表达此约束。您确实有一些选择。

选项1:contentMediaType

contentMediaTypecontentEncoding关键字曾经是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 ..."
}