JSON 架构未能解析 $ref,预期 StartObject 布尔值,得到字符串

JSON schema failed to resolve $ref, Expected StartObject Bolean, got String

$ref

无法解析另一个文件中的子模式

错误信息: Unexpected token encountered when reading value for '$ref'. Expected StartObject, Boolean, got String. Path 'properties.organization.items.properties.$ref'

根架构

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "https://example.com/schema_root.json",
    "type": "object",
    "properties": {
        "organization": {
            "description": "Organization information associated with the sample",
            "type": "array",
            "items": {
                    "$ref": "organisation.json#"
            }
        }
    }
}

子模式在文件 organisation.json

的同一目录中
{
    "$id": "organisation",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "Organisation",
    "additionalProperties": false,
    "type": "object",
    "properties": {
        "Name": {
            "type": "string"
        },
        "Role": {
            "type": "string"
        }
    }
}

在我看来,根模式可以找到子模式。但是,由于某些数据类型的差异,它无法加载子模式。但我不确定差异是什么?

在错误消息 Expected StartObject.got String 中,我不确定 StartObject 是什么以及 String 指的是什么。

有两个问题。

  1. 引用路径上有一个扩展名(.json),但标识符路径上没有。
  2. 引用已根据 $id 更改您识别第二个架构的方式进行解析。

希望这不是太简洁,无法遵循,但事情是这样的。

// From Root Schema
"$id":  "http://example.com/schema_root.json"
"$ref": "organization.json#"

// $ref resolves to ...
"$ref": "http://example.com/organization.json#"

// Expected $id
"$id": "http://example.com/organization.json"

// Actual $id
"$id":                    "organization"

引用中的标识符与第二个架构中的 $id 不匹配,因此验证器无法找到它需要的架构。