web-dev-qa-db-ja.com

プロパティ名が不明なJSONスキーマ

オブジェクトの配列に不明なプロパティ名を含むJSONスキーマが必要です。良い例は、Webページのメタデータです。

      "meta": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "unknown-attribute-1": {
              "type": "string"
            },
            "unknown-attribute-2": {
              "type": "string"
            },
            ...
          }
        }
      }

何かアイデアをお願いします、または他の方法で同じものに到達しますか?

32
Thami Bouchnafa

patternPropertiesの代わりにpropertiesを使用してください。以下の例では、パターンマッチの正規表現.*は任意のプロパティ名を受け入れ、"additionalProperties": falseを使用することによってのみ、stringまたはnullのタイプを許可しています。

  "patternProperties": {
    "^.*$": {
      "anyOf": [
        {"type": "string"},
        {"type": "null"}
      ]
    }
  },
  "additionalProperties": false
47

明示的に定義されていないプロパティに制約を設定できます。次のスキーマは、「メタ」が、プロパティが文字列型のオブジェクトの配列になるように強制します。

{
    "properties" : {
        "meta" : {
            "type" : "array",
            "items" : {
                "type" : "object",
                "additionalProperties" : {
                    "type" : "string"
                }
            }
        }
    }
}

文字列の配列だけが必要な場合は、次のスキーマを使用できます。

{
    "properties" : {
        "meta" : {
            "type" : "array",
            "items" : {
                "type" : "string"
            }
        }
    }
}
8
jruizaranguren

@jruizarangurenの解決策は私にとってうまくいきます。スキーマを定義するのは私と同じですが、別のソリューションを選択しました

"meta": {
        "type": "array",
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "value": {
                "type": "string"
              }
            }
          }
        }
      }

オブジェクトを名前と値のオブジェクトの配列に変換しました有効なJSONの例:

"meta": [
    [
      {
        "name": "http-equiv",
        "value": "Content-Type"
      },
      {
        "name": "content",
        "value": "text/html; charset=UTF-8"
      }
    ],
    [
      {
        "name": "name",
        "value": "author"
      },
      {
        "name": "content",
        "value": "Astrid Florence Cassing"
      }
    ]
  ]
0
Thami Bouchnafa