web-dev-qa-db-ja.com

辞書のようなJSONスキーマ

特定の仕様を持つネストされたオブジェクトをいくつでも含めることができるjsonオブジェクトがあります。次に例を示します。

{
  "Bob": {
    "age": "42",
    "gender": "male"
  },
  "Alice": {
    "age": "37",
    "gender": "female"
  }
}

そして、次のようなスキーマが必要です。

{
  "type": "object",
  "propertySchema": {
    "type": "object",
    "required": [
      "age",
      "gender"
    ],
    "properties": {
      "age": {
        "type": "string"
      },
      "gender": {
        "type": "string"
      }
    }
  }
}

私はそれを配列に変換し、オブジェクト内に「名前」をプッシュできることを知っています。その場合、私のスキーマは次のようになります。

{
  "type": "array",
  "items": {
    "type": "object",
    "required": [
      "name",
      "age",
      "gender"
    ],
    "properties": {
      "name": {
        "type": "string"
      },
      "age": {
        "type": "string"
      },
      "gender": {
        "type": "string"
      }
    }
  }
}

でも辞書のような構造にしたいです。そのようなスキーマを作成することは可能ですか?

20
ironic

追加プロパティはキーワードです:

{
    "type" : "object",
    "additionalProperties" : {
        "type" : "object",
        "required" : [
            "age",
            "gender"
        ],
        "properties" : {
            "age" : {
                "type" : "string"
            },
            "gender" : {
                "type" : "string"
            }
        }
    }
}

additionalPropertiesは、さまざまな意味を持つ次の値を持つことができます。

  • "additionalProperties": falseこれ以上のプロパティは許可されません。
  • "additionalProperties": trueこれ以上のプロパティが許可されます。これがデフォルトの動作です。
  • "additionalProperties": {"type": "string"}指定されたタイプ(ここでは「文字列」)の値がある場合、(任意の名前の)追加のプロパティが許可されます。
  • "additionalProperties": {*any schema*}追加のプロパティは、上記の例のように、提供されたスキーマを満たす必要があります。
32
jruizaranguren