2

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

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

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

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

是否可以使用 json 模式来做到这一点?JSON对象的同样问题。

数据示例:

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

1 回答 1

3

简短的回答是否定的,JSON Schema 不知道如何表达这个约束。你确实有几个选择。

选项1:contentMediaType

contentMediaType和关键字曾经是 JSON Hyper-Schema 规范的contentEncoding一部分,但在 Draft-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 ..."
}
于 2018-08-06T02:09:55.437 回答