【问题标题】:JSON schema validation/unique valuesJSON 模式验证/唯一值
【发布时间】:2021-10-14 17:16:47
【问题描述】:

求指点......

我需要一个 JSON 模式来验证文档,确保“someKey”的值在 JSON 文档中是唯一的。

此 JSON 文档显示“someKey”为“key01”、“key44”和“key45”。

{
  "something01" : "value01",
  "something02" : "value02",
  "something03" : [
                   {
                     "someKey" : "key01",
                     "somethingElse" : "placeholder value"
                   },
                   {
                     "someKey" : "key44",
                     "somethingElse" : "placeholder value"
                   },
                   {
                     "someKey" : "key45",
                     "somethingElse" : "placeholder value"
                   }
                 ]
}

本文档显示“someKey”的值为“key01”和“key01”(“key01”是复制品)。

{
  "something01" : "value01",
  "something02" : "value02",
  "something03" : [
                   {
                     "someKey" : "key01",
                     "somethingElse" : "placeholder value"
                   },
                   {
                     "someKey" : "key01",
                     "somethingElse" : "placeholder value"
                   }
                 ]
}

并且该文档显示“someKey”是“key02”、“key05”、“key02”和“key02”(“key02”是复制品)

{
  "something01" : "value01",
  "something02" : "value02",
  "something03" : [
                   {
                     "someKey" : "key02",
                     "somethingElse" : "placeholder value"
                   },
                   {
                     "someKey" : "key05",
                     "somethingElse" : "placeholder value"
                   },
                   {
                     "someKey" : "key02",
                     "somethingElse" : "placeholder value"
                   },
                   {
                     "someKey" : "key02",
                     "somethingElse" : "placeholder value"
                   }
                 ]
}

基本上,我需要一些指导,了解如何或是否可以编写一个验证第一个文档但不验证其他文档的 JSON 模式。

提前致谢

【问题讨论】:

    标签: json jsonschema


    【解决方案1】:

    你不能用标准的 JSON Schema 来表达这一点,但是有一个第三方词汇表为这种事情定义了一个 uniqueKeys 关键字。你可以在https://gregsdennis.github.io/json-everything/usage/vocabs-unique-keys.html找到文档

    {
      "$schema": "https://gregsdennis.github.io/json-everything/meta/unique-keys",
      "type": "object",
      "properties": {
        "something01": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "someKey": { "type": "string" }
            }
          },
          "uniqueKeys": ["/someKey"]
        }
      }
    }
    

    据我所知,JSON Everything (C#) 是目前唯一支持此词汇表的实现。如果您使用其他东西,您可能需要请求更新实现以支持此关键字。否则,您需要在 JSON Schema 之外验证此约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 2016-11-21
      相关资源
      最近更新 更多