JSON模式是否支持从单独对象中的列表中选择字符串?

发布于 2025-02-13 18:16:35 字数 2710 浏览 0 评论 0原文

我想创建一个模式,其中字符串属性的值链接到JSON对象不同部分中属性名称的名称。例如:

{
  "configuration": {
    "sites": {
      "Site1": {
        "displayName": "Default Site",
        "connectionString": "Site1"
      },
      "Site2": {
        "displayName": "Site 2",
        "connectionString": "Site3"
      },
      "Site3": {
        "displayName": "Site 3",
        "connectionString": "Site3"
      }
    },
    "defaultSite": "GENBuild"
  },
  "conectionStrings": {
    "Site1": "",
    "Site2": "",
    "Site3": ""
  }
}

我希望该架构要执行ConnectionsTring网站的值,以匹配ConnectionsTrings map中的属性名称之一。 JSON模式是否支持一种方法?

到目前为止,这是我的模式:

{
  "definitions":{
    
  },
  "$schema":"http://json-schema.org/draft-07/schema#",
  "$id":"https://example.com/object1657140793.json",
  "title":"Root",
  "type":"object",
  "required":[
    "configuration",
    "conectionStrings"
  ],
  "properties":{
    "configuration":{
      "$id":"#root/configuration",
      "title":"Configuration",
      "type":"object",
      "required":[
        "sites",
        "defaultSite"
      ],
      "properties":{
        "sites":{
          "$id":"#root/configuration/sites",
          "title":"Sites",
          "type":"object",
          "patternProperties":{
            "^Site[d]$":{
              "type":"object",
              "required":[
                "displayName",
                "connectionString"
              ],
              "properties":{
                "displayName":{
                  "title":"Display Name",
                  "type":"string",
                  "default":"",
                  "examples":[
                    "Default"
                  ],
                  "pattern":"^.*$"
                },
                "connectionString":{
                  "title":"Connection String",
                  "type":"string",
                  "default":"",
                  "examples":[
                    "Site1"
                  ],
                  "pattern":"^Site[d]$"
                }
              }
            }
          }
        },
        "defaultSite":{
          "$id":"#root/configuration/defaultSite",
          "title":"Default Site",
          "type":"string",
          "default":"",
          "examples":[
            "Site1"
          ],
          "pattern":"^Site[d]$"
        }
      }
    },
    "conectionStrings":{
      "$id":"#root/conectionStrings",
      "title":"Conection Strings",
      "type":"object",
      "patternProperties":{
        "^Site[d]$":{
          "type":"string",
          "default":"",
          "examples":[
            ""
          ],
          "pattern":"^.*$"
        }
      }
    }
  }
}

I would like to create a schema where the value of a string property links to the name of a property in a different part of the JSON object. For example:

{
  "configuration": {
    "sites": {
      "Site1": {
        "displayName": "Default Site",
        "connectionString": "Site1"
      },
      "Site2": {
        "displayName": "Site 2",
        "connectionString": "Site3"
      },
      "Site3": {
        "displayName": "Site 3",
        "connectionString": "Site3"
      }
    },
    "defaultSite": "GENBuild"
  },
  "conectionStrings": {
    "Site1": "",
    "Site2": "",
    "Site3": ""
  }
}

What I would like for the schema to enforce that the connectionString value of the site to match one of the property names in the connectionStrings map. Does JSON schema support a way to do this?

Here is my schema so far:

{
  "definitions":{
    
  },
  "$schema":"http://json-schema.org/draft-07/schema#",
  "$id":"https://example.com/object1657140793.json",
  "title":"Root",
  "type":"object",
  "required":[
    "configuration",
    "conectionStrings"
  ],
  "properties":{
    "configuration":{
      "$id":"#root/configuration",
      "title":"Configuration",
      "type":"object",
      "required":[
        "sites",
        "defaultSite"
      ],
      "properties":{
        "sites":{
          "$id":"#root/configuration/sites",
          "title":"Sites",
          "type":"object",
          "patternProperties":{
            "^Site[d]
quot;:{
              "type":"object",
              "required":[
                "displayName",
                "connectionString"
              ],
              "properties":{
                "displayName":{
                  "title":"Display Name",
                  "type":"string",
                  "default":"",
                  "examples":[
                    "Default"
                  ],
                  "pattern":"^.*
quot;
                },
                "connectionString":{
                  "title":"Connection String",
                  "type":"string",
                  "default":"",
                  "examples":[
                    "Site1"
                  ],
                  "pattern":"^Site[d]
quot;
                }
              }
            }
          }
        },
        "defaultSite":{
          "$id":"#root/configuration/defaultSite",
          "title":"Default Site",
          "type":"string",
          "default":"",
          "examples":[
            "Site1"
          ],
          "pattern":"^Site[d]
quot;
        }
      }
    },
    "conectionStrings":{
      "$id":"#root/conectionStrings",
      "title":"Conection Strings",
      "type":"object",
      "patternProperties":{
        "^Site[d]
quot;:{
          "type":"string",
          "default":"",
          "examples":[
            ""
          ],
          "pattern":"^.*
quot;
        }
      }
    }
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

世界如花海般美丽 2025-02-20 18:16:35

您不能使用JSON模式或盒子的盒子来执行此操作,但是我有一个扩展词汇为jsonschema.net实施: jsonschema.net.data

You can't do this with JSON Schema or of the box, but I have an extension vocabulary implemented for JsonSchema.Net: JsonSchema.Net.Data.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文