当前位置: 首页 > 知识库问答 >
问题:

json-schema中有办法验证匹配regex的对象键吗?

鞠乐
2023-03-14

有没有办法让json模式验证器来验证json对象的键?例如:

{
    "$schema": "http://json-schema.org/draft-07/schema",
    "type": "object",
    "properties": { // here properties is an object containing user-defined keys that should be alphanumeric or underscore.
        "values": {
            "type": "object",
            "patternProperties": {
                "[a-zA-Z0-9_]+": {
                    "description": "Foo"
                }
            }
        }
    }
}

下面是一些应该和不应该通过的示例:

// Should pass:
{
 "values": {
   "myKey1": { "foo": 1 },
   "myKey2_": "bar"
 }
}

// Should fail but no error is shown saying this doesnt match schema:
{
  "values": {
    "m\1[]": 123
  }
}

我尝试使用模式属性,但任何与我的正则表达式不匹配的内容都会被忽略,不会在有问题的行上抛出任何验证错误。这与有关模式属性的文档一致:https://json-schema.org/understanding-json-schema/reference/object.html#pattern-properties

有没有办法做我正在寻找的事情?谢谢

共有1个答案

唐永春
2023-03-14

您应该能够使用additionalProperties使未通过所需patternProperties的对象无效。

默认情况下,允许任何附加属性。

{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"properties": {
    "values": {
        "type": "object",
        "patternProperties": {
            "[a-zA-Z0-9_]+": {
                "description": "Foo"
            },
            "additionalProperties": false
            }
        }
    }
}

↳ JSON 架构:其他属性

 类似资料:
  • 我试图为我用JavaScript制作的密码验证程序开发一个regex表达式。 要求 null

  • json文档如下所示。我想在qml中为它定义一个类,就像typescript中的关键字一样。 我试图定义一个qml类在文件 那就用吧 但是在键下很难处理对象的向量。因为qml不允许在类A下定义类B。 那么有人知道如何定义强类型类来保存qml中从json解析的对象吗?然后我可以在qtcreator中使用自动完成的类。

  • 问题内容: 这是我第一次在laravel中使用验证。我正在尝试对以下json对象应用验证规则。json对象名称是有效负载,下面给出示例。 验证码如下所示,出于测试目的,我将数字验证为数字。当我执行以下代码时,上面的json对象被批准并插入到我的数据库中。相反,它应该给我一个例外,因为我正在传递带有字母数字值的名称,是我做错了什么: 问题答案: 请这样 验证中的字段必须是数字,并且必须具有确切的值长

  • 我不知道如何正确设置超架构以使用json架构验证器。我使用的是json模式验证器的java版本,版本是2.2.5。 我的模式是: 我的 json 对象是: 现在,当我将模式加载到并打算开始验证时,我得到以下警告: 除了$Schema字段之外,还有什么要配置以使用超模式的吗?

  • 问题内容: 我试图通过构建验证两种不同对象类型的架构来弄清oneOf的工作原理。例如,一个人(名字,姓氏,运动)和车辆(类型,费用)。 以下是一些示例对象: 问题是我做错了什么以及如何解决。这是模式: 当我尝试在此解析器中验证它时: 我收到以下错误: 问题答案: 试试这个:

  • 我正在用swagger.io起草一个API文档,并试图使其适合我们的用例。系统将接收和处理来自所有来源的数据,每个来源都有不同的字段集。 虽然处理的产品共享相同的模式,但我们也希望在模式中包含输入以供参考。例如,给定 假设对于来自不同来源的每个输入,我们最终都有和。所以我们的响应模式对象 既然我们已经定义了子对象,那么我们是否可以为原始输入定义一个自由格式的对象,以便来自另一个源的对象是有效的 如