yaml 解析时出错。预期 <block end>,但找到 <scalar>
Posted
技术标签:
【中文标题】yaml 解析时出错。预期 <block end>,但找到 <scalar>【英文标题】:yaml Error while parsing. Expected <block end>, but found <scalar> 【发布时间】:2017-10-16 20:13:29 【问题描述】:我正在尝试使用 got-swag(npm 包)测试一个 swagger api
当我尝试使用 json 架构验证 json 响应时,当单独的 yaml 文件合并为一个 yaml 和 json 文件时,我会收到 parseError。起源是 -validate() 行。 validate() 源自 got-swag 包,但它在底层 jsonschema.validate(data, schema); 依赖项
中失败了 x-tests:
- description: Should return array of ferries
steps:
- get('/api/get/link/ferries')
- equal(res.statusCode, 200)
- ok(res.json.length > 0)
- validate(res.json, $ref: '#/definitions/ferry')
这是产生的错误:
throw new exports.ParserError('while parsing a block mapping', this.marks.slice(-1)[0], "expected <block end>, but found " + token.id, token.start_mark);
^
while parsing a block mapping
on line 29, column 15
expected <block end>, but found <scalar>
on line 29, column 76
at ParserError.YAMLError [as constructor] (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\errors.js:70:46)
at ParserError.MarkedYAMLError [as constructor] (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\errors.js:90:45)
at new ParserError (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\parser.js:17:48)
at Loader.__dirname.Parser.Parser.parse_block_mapping_key (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\parser.js:433:15)
at Loader.__dirname.Parser.Parser.check_event (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\parser.js:61:48)
at Loader.__dirname.Composer.Composer.compose_mapping_node (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\composer.js:248:20)
at Loader.__dirname.Composer.Composer.compose_node (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\composer.js:160:21)
at Loader.__dirname.Composer.Composer.compose_sequence_node (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\composer.js:216:30)
at Loader.__dirname.Composer.Composer.compose_node (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\composer.js:158:21)
at Loader.__dirname.Composer.Composer.compose_mapping_node (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\composer.js:250:27)
【问题讨论】:
【参考方案1】:该行需要用引号引起来以转义内部:
字符:
- "validate(res.json, $ref: '#/definitions/ferry')"
^
:
是 YAML 中的特殊字符,key: value
对的分隔符。如果不进行转义,该行将被解析为键名 validate(res.json, $ref
,值为 '#/definitions/ferry')
,并且解析器在结束引号后的 )
上阻塞。
相关:How to escape indicator characters (i.e. : or - ) in YAML
【讨论】:
以上是关于yaml 解析时出错。预期 <block end>,但找到 <scalar>的主要内容,如果未能解决你的问题,请参考以下文章
Azure DevOps YAML 管道错误:解析块映射时未找到预期的密钥
ValueError:检查目标时出错:预期 block5_pool 有 4 个维度,但得到了形状为 (60000, 10) 的数组
Google App Engine“解析./app.yaml时出错:未知的url处理程序类型”
Google App Engine Node.js 应用程序 - “解析 app.yaml 时出错:未知 url 处理程序类型”