web-dev-qa-db-ja.com

名前/値構造のJSONスキーマを作成する方法

私の問題は、マップのコンテンツを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に配列を含める必要はありません。

あなたのバリデーターがそれをサポートしていると仮定すると、 patternProperties を使用できます。

スキーマについて...

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

...そしてドキュメント...

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

...プロパティfooの値は、文字列であるため有効ですが、baz数値であるため検証に失敗します。

24
McDowell

@augurar "additionalProperties"によって提案されたソリューションを使用しました:{"type": "string"}

aWS API Gatewayモデルの場合....およびSDKは、Java/Android SDK

@Arne Burmeister-私の場合-ソリューション1は必要に応じて機能しませんでしたが、モデル(スキーマ作成)でエラーは発生しませんでした

0