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

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