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
指的是什么。
有两个问题。
- 引用路径上有一个扩展名(
.json
),但标识符路径上没有。
- 引用已根据
$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
不匹配,因此验证器无法找到它需要的架构。
$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
指的是什么。
有两个问题。
- 引用路径上有一个扩展名(
.json
),但标识符路径上没有。 - 引用已根据
$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
不匹配,因此验证器无法找到它需要的架构。