具有未知属性名的JSON模式



我想在对象数组中有一个未知属性名称的JSON模式。一个很好的例子是网页的元数据:

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

有什么想法吗,或者有什么方法可以达到同样的效果吗?

patternProperties代替properties。在下面的示例中,模式匹配regex .*接受任何属性名称,并且我仅通过使用"additionalProperties": false允许stringnull类型。

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

…或者如果你只想让字符串出现在你的对象中(和原来的问题一样):

  "patternProperties": {
    "^.*$": {
        {"type": "string"},
    }
  },
  "additionalProperties": false

您可以对未显式定义的属性进行约束。下面的模式强制"meta"是一个属性为string类型的对象数组:

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

如果你只想要一个字符串数组,你可以使用以下模式:

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

@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"
      }
    ]
  ]

相关内容

  • 没有找到相关文章

最新更新