使用patternProperties进行Json验证现在可以正常工作

时间:2018-01-30 10:22:10

标签: json validation jsonschema json-schema-validator

我使用Github库"json-schema"来针对自定义架构验证JSON。但是我无法根据我定义的架构验证以下JSON。

JSON持有2条新闻条目:

[{
  "bodytext": "Lorem ipsum",
  "datetime": "2018-01-29T13:18:56+0100",
  "falMedia": {
    "00000000519602e500007f310096b8e2": {
      "alternative": null,
      "description": "The description",
      "link": "",
      "pid": 6043,
      "processedFile": {
        "publicUrl": "image01.png"
      },
      "title": null,
      "uid": 52925
    },
    "0000000051960a1700007f310096b8e2": {
      "alternative": null,
      "description": "Another description",
      "link": "",
      "pid": 6043,
      "processedFile": {
        "publicUrl": "images/picture01.jpg"
      },
      "title": null,
      "uid": 52927
    }
  },
  "falRelatedFiles": [ ],
  "istopnews": true,
  "pid": 6043,
  "teaser": "A short lorem teaser",
  "title": "The message title",
  "uid": 51911
},
{
  "bodytext": "Hello World",
  "datetime": "2018-01-29T13:24:33+0100",
  "falMedia": [ ],
  "falRelatedFiles": [ ],
  "istopnews": false,
  "pid": 339,
  "teaser": null,
  "title": "Just a short message",
  "uid": 51915
}]

这是我尝试验证的架构:

{
  "$schema": "http://json-schema.org/draft-04/schema",
  "title": "FPÖ News",
  "description": "Schema for FPÖ News articles accesed by the mobile apps",
  "type": "array",
  "items": {
    "additionalProperties": false,
    "properties": {
      "bodytext": {
        "type": "string"
      },
      "datetime": {
        "type": "string"
      },
      "falMedia": {
        "anyOf": [
          {
            "type": "object",
            "patternProperties": {
              "^[0-9abcde]*$": {
                "type": "object",
                "properties": {
                  "alternative": {
                    "type": ["null", "string"]
                  },
                  "description": {
                    "type": "string"
                  },
                  "link": {
                    "type": "string"
                  },
                  "pid": {
                    "type": "integer"
                  },
                  "processedFile": {
                    "type": "object",
                    "properties": {
                      "additionalProperties": false,
                      "publicUrl": {
                        "type": "string"
                      }
                    }
                  },
                  "title": {
                    "type": "string"
                  },
                  "uid": {
                    "type": "integer"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "array"
          }
        ]

      },
      "falRelatedFiles": {
        "type": "array"
      },
      "istopnews": {
        "type": "boolean"
      },
      "pid": {
        "type": "integer"
      },
      "teaser": {
        "type": ["string", "null"]
      },
      "title": {
        "type": "string"
      },
      "uid": {
        "type": "integer"
      }
    },
    "required": [
      "bodytext",
      "datetime",
      "istopnews",
      "pid",
      "teaser",
      "title",
      "uid"
    ]
  }
}

在我看来,在验证时,“patternProperties”部分下面的所有内容都没有被认可。

我的问题是,“falMedia”下方对象的键是动态生成的。因此我不知道这些价值观。我想过使用“patternProperties”。但是当我将“新闻”中“falMedia”条目的值更改为(根据patternProperties下提供的正则表达式)无效时,库仍然表示一切正常。

我错过了什么吗? 我的架构是假的吗?

我会非常感激任何帮助。

由于 克劳斯

1 个答案:

答案 0 :(得分:0)

你的问题似乎是你的正则表达式应该是" ^ [0-9abcdef] * $"而不是" ^ [0-9abcde] * $"。由于您错过了" f",patternProperties不匹配任何值,因此不会限制" falMedia&#34中的属性;