2017-05-10 29 views
0

我试图拿出一个架构验证JSON对象类似如下:JSON模式是否可以验证一个属性是否包含某个属性?

{ 
"id":"some_id", 
"properties":{ 
    "A":{ 
    "name":"a", 
    "isindex":true 
    }, 
    "B":{ 
    "name":"b" 
    }, 
    "C":{ 
    "name":"c" 
    } 
} 
} 

该协议是:

  1. 属性A,B,C是事先不知道,并且可以是任何字符串。
  2. 其中一个属性(A,B,C ...)的值为“isindex”:真正的键值对表示该属性将用作索引。那就是说以下是无效的。

{ 
    "id":"some_id", 
    "properties":{ 
    "A":{ 
     "type":"string", 
     "isindex":true 
    }, 
    "B":{ 
    "type":"string" 
    }, 
    "C":{ 
     "type":"array", 
     "isindex":true 
    } 
    } 
} 

实际上,我不确定JSON模式是否适合此工具。

任何或所有的帮助表示赞赏!

+0

这是很难看到你问这里。你可以扩大一点吗? –

+0

@TravisJ我发现一个错字,并纠正它(只有一个 - >一个也是唯一一个)。这可能会让你感到困惑。对于那个很抱歉。多一点的背景可能会有所帮助。在我的问题中要验证的对象描述了一个类型定义。该类型具有多个属性(A,B,C,...),并且只有一个属性应该用作该类型对象的唯一标识(索引)。我想用JSON模式来确定是这种情况。 – AaronT

回答

1

JSON Schema是这类事情的正确工具,但是您偶然发现了一个它无法处理的特定情况。你可以断言至少有一个匹配特定的模式,但是你不能断言只有一个匹配。

你能做的最好的事情是改变你的数据结构是这样的......

{ 
    "id":"some_id", 
    "properties":{ 
    "A":{ 
     "name":"a" 
    }, 
    "B":{ 
     "name":"b" 
    }, 
    "C":{ 
     "name":"c" 
    } 
    }, 
    "index": "A" 
} 
+0

Touche! “你可以断言至少有一个匹配特定的模式,但是你不能断言只有一个匹配。”我想这回答了我的问题。谢谢! – AaronT

相关问题