首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义一组元素的单一使用的JSON模式

定义一组元素的单一使用的JSON模式
EN

Stack Overflow用户
提问于 2020-07-07 07:31:38
回答 1查看 184关注 0票数 0

我使用草案-04来定义JSON模式。我最初的问题是,我想为下面的结构定义模式

代码语言:javascript
复制
{
"config1" : [
              { <category-1> : {some Object which i know how to define schema} },
              { <category-2> : {some Object which i know how to define schema} }
            ],
"config2" : {some other structure}
}

这里,范畴-n是在包含类别的n元素集合中定义的范畴.

我知道模式定义了静态数据结构,因此我们不能枚举键(对吗?)因此,作为一项工作,我需要如下所示的config1

代码语言:javascript
复制
"config1" : [
              { "categoryName" : "category-1"
                "categoryPayload" : {some Object which i know how to define schema} },
              { "categoryName" : "category-2"
                "categoryPayload" : {some Object which i know how to define schema} }
            ]

对于每个类别定义,我知道我可以使用类似于"enum":“分类-1”,“类别-1”的,但问题是,在第一个json中,我从json建议中得到了不使用重复键的好处。每个类别都是独一无二的,我不希望有人对同一个类别使用不同的categoryPayload。如何将config-1的数组元素限制为每个类别只有一个元素(没有重复的类别元素)

编辑-1

以我的派生方法(使用类别作为值而不是键)为例,假设类别-1、类别-2和类别-3是允许的类别。因此,下面的json应该通过验证。

代码语言:javascript
复制
{
  "config-1": [
    {
      "categoryName": "category-1",  //line-1
      "categoryPayload": {
        "key1": "value1",
        "key2": "value2"
      }
    },
    {
      "categoryName": "category-2",   //line-2
      "categoryPayload": {
        "key1": "value1",
        "key3": "value3"
      }
    }
  ],
  "config-2": "something"
}

如果将第1行替换为类别2(第1行和第2行都有相同的值),那么验证就会失败。显然,如果我在第1行替换了第7类(不是允许枚举的一部分),它也会失败。

EN

回答 1

Stack Overflow用户

发布于 2020-07-07 08:18:39

每个类别的架构是否从来都不是相同的?不能断言对象值的唯一性,而只能断言其模式的唯一性。

代码语言:javascript
复制
{
    "type": "object",
    "properties": {
      "config1": {
        "type": "array",
        "items": {
          "type": "object",
          "patternProperties": {
            "\\w+": {
              "oneOf": [
                {"type": "object", "properties": {"a": {}}, "additionalProperties": false},
                {"type": "object", "properties": {"b": {}}, "additionalProperties": false}
              ]
            }
          },
          "additionalProperties": false
        }
      }
    }
}

更新:这是另一种方式:

代码语言:javascript
复制
{
    "type": "object",
    "properties": {
      "config1": {
        "type": "array",
        "items": [
          {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
          {"type": "array", "items": {"type": "object"}, "uniqueItems": true},
        ]
      }
    }
}

这样,您就可以拥有唯一的键和值。然后在应用程序中压缩两个数组。

这是通过的:

代码语言:javascript
复制
{
  "config1" : [
    ["category-1", "category-2"],
    [{"a": 1}, {"a": 2}]
  ]
}

这是失败的:

代码语言:javascript
复制
{
  "config1" : [
    ["category-1", "category-2"],
    [{"a": 1}, {"a": 1}]
  ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62770180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档