【问题标题】:JSON schema: Property value must be equal to parent keyJSON 模式:属性值必须等于父键
【发布时间】:2021-02-19 06:46:06
【问题描述】:

根据JSON-Schema 7.0 String section,我可以使用"relative-json-pointer" 来确保属性值与父键完全匹配。

在Relative JSON Pointers的examples section (5.1)中,显示“上一层”得到key值,是"0#"。

给定以下 JSON 文档:

{
    "valid": {
        "name": "valid"
    },
    "invalid": {
        "name": "invalid, because this value is not the same value as the parent key"
    }
}

以下 json-schema 应捕获 "invalid" 对象:

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "additionalProperties": {
        "type": "object",
        "required": ["name"],
        "properties": {
            "name": {
                "type": "string",
                "json-pointer": "0#"
            }
        }
    }
}

我确信 json 模式是正确的,因为它会在以下 JSON 文档中捕获两个对象,"invalid2" 和 "invalid3":

{
    "valid": {
        "name": "valid"
    },
    "invalid": {
        "name": "invalid, because this value is not the same value as the parent key"
    },
    "invalid2": {   },
    "invalid3": { "name": 2 }
}

我使用ajv-cli 3.3.0 和python jsonschema 3.2.0 进行测试。但是两种验证实现都不会捕获"invalid" 对象。两种实现都声称完全支持 JSON Schema Draft 7。

【问题讨论】:

    标签: json jsonschema ajv python-jsonschema


    【解决方案1】:

    我可以使用“relative-json-pointer”来确保属性值 是父键的完全匹配。

    我不确定您是如何阅读该部分的,但这根本不是它所说的。

    您在文档站点上引用的该部分列出了format 关键字的一组内置可能值。

    它对您要验证的值没有任何作用,例如,relative-json-pointer。

    你想做什么?

    【讨论】:

    • 你说得对,它与format有关。我会试试的。但它确实对"json-pointer" 表示“请注意,仅当整个字符串仅包含 JSON 指针内容时才应使用它”。我假设同一部分中的"relative-json-pointer" 也是如此。
    • 是的。它指出整个字符串必须是 JSON 指针,例如 /foo/bar,而不是 uri 引用,例如 #/foo/bar/。
    • 您使用 format: json-pointer 验证的 json 指针在实例中。指针不在架构中。没有json-pointer 关键字。
    • 好吧,因为它是内置的,我想我不能在架构中使用相对 JSON 指针,但只有当它们在 JSON 文档中时。回答您的问题:我想将 "invalid" 对象视为错误,因为它的 "name" 属性不等于它的对象键。
    • 我明白了。不,你不能在 JSON Schema 中这样做。架构不能引用实例中的位置。
    猜你喜欢
    • 1970-01-01
    • 2015-10-03
    • 2023-02-10
    • 2015-10-20
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    相关资源
    最近更新 更多