首页 > 解决方案 > JSON 模式验证/唯一值

问题描述

求一点指导......

我需要一个 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"
                   }
                 ]
}

本文档显示了值为“key01”和“key01”的“someKey”(“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 模式的指导。

提前致谢

标签: jsonjsonschema

解决方案


你不能用标准的 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 之外验证此约束。


推荐阅读