Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为名称/值结构创建JSON模式?_Java_Javascript_Json_Jsonschema - Fatal编程技术网

Java 如何为名称/值结构创建JSON模式?

Java 如何为名称/值结构创建JSON模式?,java,javascript,json,jsonschema,Java,Javascript,Json,Jsonschema,我的问题是我正在将map的内容序列化为JSON 在输出(JSON)中,我有一个遵循key/name语法规则的对象 键是从映射键创建的,名称是从值创建的 模型示例: class Storage { Map<String,String> values = new HashMap<>(); { map.put("key1","key1"); map.put("key2","key2"); ma

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

在输出(JSON)中,我有一个遵循key/name语法规则的对象

键是从映射键创建的,名称是从值创建的

模型示例:

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

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

    }

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中有数组。

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

对于模式

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

…属性foo的值是有效的,因为它是一个字符串,但是baz由于它是一个数字而无法验证。

我使用了@augurar建议的解决方案 “附加属性”:{“类型”:“字符串”}

对于AWS API网关模型。。。。SDK能够按照Java/Android SDK中的要求生成Map变量


@Arne Burmeister-在我的例子中-解决方案1没有按需要工作-尽管它没有在模型中给出任何错误(创建的模式)

听起来您拥有的属性应该是一个“key”:“value”:数组。我不想要一个成对数组。我想让key=value作为对象的一部分,它是有效的,并且易于反序列化。因此,您要问的是,在您事先不知道名称的情况下,如何指定名称、值对?不行。不管怎样,你的目标不是能够重新构建HashMap吗?在这种情况下,您将通过一个循环来添加键和值。您可能是对的。但是,如果有一种有效的方法来序列化和反序列化此类对象,则应该可以为其创建模式。建议人们可以使用一些内部未定义的对象。更简单的是:使用
“additionalProperties”:{“type”:“string”}
。这指定任何未另行指定的属性都必须满足给定的架构。“{1,}”对具有映射键值的数据使用此解决方案为我的问题提供了答案。很高兴你发了邮件。非常感谢。
{
  "title": "Map<String,String>",
  "type": "object",
  "patternProperties": {
    ".{1,}": { "type": "string" }
  }
}
{
    "foo":"bar",
    "baz":1
}