【问题标题】:Using a $ref and other properties within a JSON Schema在 JSON Schema 中使用 $ref 和其他属性
【发布时间】:2019-06-25 08:09:12
【问题描述】:

例如,在 JSON 架构中,拥有 $ref 和其他属性是有效的。

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "title": "My schema",
    "properties": {
        "scripts": {
            "$ref": "#/definitions/scriptsBase",
            "description": "More docs.",
            "minLength": 10
        }
    },
    "definitions": {
        "scriptsBase": {
            "type": "string",
            "description": "Base Description",
            "minLength": 5
        }
    }
}

如果这是允许的,那么在解析$refed 和$refing 模式中定义的属性时有什么规则(在本例中为minLengthdescription。但这可能会变成如果allOf 等都在两者中定义,则要复杂得多。

【问题讨论】:

    标签: jsonschema jsonpath json-schema-validator jsonpointer json-ref


    【解决方案1】:

    json schema property description and "$ref" usage 中找到答案,基本上如果 $ref 存在,所有其他属性都会被忽略。

    https://datatracker.ietf.org/doc/html/draft-pbryan-zyp-json-ref-03#section-3

    1. 语法

    JSON 引用是一个 JSON 对象,其中包含一个名为
    的成员 "$ref",它有一个 JSON 字符串值。示例:

    { "$ref": "http://example.com/example.json#/foo/bar" }

    如果一个 JSON 值没有这些特征,那么它应该 不被解释为 JSON 参考。

    “$ref”字符串值包含一个 URI [RFC3986],它标识 被引用的 JSON 值的位置。这是一个错误
    如果字符串值不符合 URI 语法规则,则为条件。
    JSON 引用对象中除“$ref”之外的任何成员都应为
    忽略。

    【讨论】:

    • 你应该知道这在草案 8 中发生了变化,它允许在 $ref 旁边的关键字作为将两个模式放在 allOf 中的简写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2020-07-18
    相关资源
    最近更新 更多