如何为名称/值结构创建 JSON 架构?

2022-09-01 09:01:08

我的问题是我正在将map的内容序列化为JSON。

在输出(JSON)中,我有遵循键/名称语法规则的对象。

密钥是根据映射键创建的,名称是从值创建的。

模型示例:

  class Storage {
       Map<String,String> values = new HashMap<>();

      {
         map.put("key1","key1");
         map.put("key2","key2");
         map.put("key3","key3");
      }

    }

JSON 示例对象:

{
  key1=value1,
  key2=value2,
  key3=value3
}

JSON 架构:

{
  "name": "storage",
  "description": "Store of key values",
  "properties": {
    // How can we describe the properties if we do not know the name ?
   }
}

问题是我不知道这些值会是什么,但我知道它们会是一些。

你能帮我提供架构的完整定义吗?


免責聲明:

我知道这也可以序列化为

 {
    values: [
       {key="key1", value="value1"},
       {key="key2", value="value2"},
       {key="key3", value="value3"}
    ]
 }

但是不希望在JSON中有数组。


答案 1

假设您的验证器支持它,您可以使用 patternProperties

对于架构...

{
  "title": "Map<String,String>",
  "type": "object",
  "patternProperties": {
    ".{1,}": { "type": "string" }
  }
}

...和文档...

{
    "foo":"bar",
    "baz":1
}

...属性 foo 的值有效,因为它是一个字符串,但 baz 未通过验证,因为它是一个数字。


答案 2

我使用了@augurar“附加属性”建议的解决方案:{ “type”: “string” }

对于 AWS API Gateway Model ....并且SDK能够根据需要在Java / Android SDK中生成Map变量

@Arne Burmeister - 在我的情况下 - 解决方案1没有根据需要工作 - 尽管它没有在模型中给出任何错误(架构创建)