JSON模式可以确切地验证一个属性是否包含某个属性?

时间:2017-05-10 20:33:13

标签: json jsonschema json-schema-validator

我试图提出一个模式来验证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”:true键值对,表示该属性将用作索引。也就是说以下内容无效。
  3. {
       "id":"some_id",
       "properties":{
         "A":{
            "type":"string",
            "isindex":true
         },
         "B":{
         "type":"string"
         },
         "C":{
            "type":"array",
             "isindex":true
         }
      }
    }
    

    实际上,我不确定JSON架构是否适合用于此目的。

    感谢任何或所有帮助!

1 个答案:

答案 0 :(得分:1)

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

您可以做的最好的事情就是将数据结构更改为这样的内容......

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