2017-07-20 50 views
0

的情况是以下:JSON架构 - 如何对象定义对象递归

1.)在一个对象,我可以有一个“字符串”,“阵列”或另一个“对象”。

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

3.)“对象”可以包含1),这意味着我可以在一个对象的对象,其仅可具有虽然字符串或阵列(或甚至更多的嵌套对象)

问题是现在1.)和2.)的工作,但只要我添加“$ ref”的“对象”得到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"打破了我的代码。

我如何得到这个工作?

回答

1

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

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

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

+0

“#/ properties”只是一个空模式,“value”不是验证关键字。你最需要的是“$ ref”:“#”。 – esp

+0

''patternProperties':{“。*”:}'与'additionalProperties'相同:',效率不高。 – esp