json模式描述对象键的值(当键为动态时)

时间:2019-06-19 15:21:11

标签: jsonschema json-schema-validator

我有一个具有动态键名称的对象,我想描述键可以具有的值模式,即:

{
   "properties": {
      "usersById": {
         "additionalProperties": {
            "properties": {
               "email": {
                  "type": "boolean"
               },
               "phone": {
                  "type": "boolean"
               },
               "address": {
                  "type": "boolean"
               }
            },
            "type": "object"
         },
         "type": "object"
      }
   },

   ...
}

在我的验证步骤中(使用AJV JS pkg),这似乎没有做任何事情。我只想限制此模型架构:

{
  usersById: {
    '1234abcd': {
      email: true,
      phone: false,
      address: false,
    },
  },
}

1 个答案:

答案 0 :(得分:1)

您可以使用patternProperties,就像properties一样,但是您使用的是正则表达式。

https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.5.5

一个例子...

模式:

{
  "type": "object",
  "patternProperties": {
    "^S_": { "type": "string" },
    "^I_": { "type": "integer" }
  },
  "additionalProperties": false
}

有效实例:

{ "I_0": 42 }

无效的实例:

{ "S_0": 42 }

示例从https://json-schema.org/understanding-json-schema/reference/object.html#pattern-properties撤消

请注意,最好记住这些正则表达式不是隐式锚定的,因此,如果需要锚定的正则表达式,则需要对其进行锚定。