【问题标题】:JSON Schema - How to define object in object recursiveJSON Schema - 如何在对象递归中定义对象
【发布时间】:2017-07-20 09:17:48
【问题描述】:

情况如下:

1.) 在一个对象中,我可以有一个“字符串”、“数组”或另一个“对象”。

2.) “数组”只能包含“字符串”。

3.) “对象”可以包含 1.) 这意味着我可以在一个对象中拥有一个对象,但该对象只能有一个字符串或数组(甚至更多嵌套对象)

现在的问题是 1.) 和 2.) 有效,但只要我将“$ref”添加到“object”以获得 3.) 我的验证服务器就会因堆栈溢出而崩溃。

{
  "$schema": "http://json-schema.org/draft-04/schema",
  "type": "object",
  "properties": {
    "value": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "object",
          "patternProperties": {
            ".*": {
              "$ref": "#/properties/value"
            }
          }
        }
      ]
    }
  }
}

"$ref": "#/properties/value" 行破坏了我的代码。

如何让它工作?

【问题讨论】:

    标签: json validation recursion jsonschema


    【解决方案1】:

    自己修好了。 "$ref": "#/properties/value" 行必须更改为 "$ref": "#/properties"

    我认为 #/properties 意味着在这些对象中只允许使用属性“值”,这不是我想要的。我想拥有“价值”的内容,所以我更深了一步。

    看起来"$ref": "#/properties" 并不意味着只允许“值”,而是只表示“值”的属性。

    【讨论】:

    • "#/properties" 只是一个空模式,"value" 不是验证关键字。你需要的(很可能)是 "$ref": "#"。
    • 还有"patternProperties": {".*": <schema>}"additionalProperties": <schema>一样,只是效率较低。
    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2014-11-08
    • 2022-12-17
    • 2013-12-02
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多