使用js-yaml转换YAML文件时遭遇YAMLException错误,求解决方案
问题分析与解决
错误原因
你犯了逻辑错误:yaml.load(fileContents)已经把整个YAML文件解析成JavaScript对象,此时readFile.usage是普通字符串(对应YAML里的多行文本块)。但你把这个字符串传给yamlLint.lint()——这个工具是用来校验完整YAML文档语法的,单纯的多行文本不是合法YAML文档(YAML要求至少有键值对等文档结构),因此抛出end of the stream or a document separator is expected错误。
解决方案
根据需求分两种情况处理:
情况1:校验整个YAML文件语法
如果要确认原始YAML文件是否合法,直接用yamlLint.lint()校验原始fileContents,无需先解析:
yamlLint .lint(fileContents) .then(() => { console.log("Valid YAML file."); // 校验通过后再解析文件 const readFile = yaml.load(fileContents); // 后续处理readFile }) .catch((error) => { console.error("Invalid YAML file.", error); });
情况2:仅处理解析后的usage字段
既然你说YAML文件经校验器检查无误,那根本不需要对readFile.usage做YAML校验——yaml.load能成功解析,就说明这个字段格式完全符合YAML规范,直接使用字符串即可:
try { const readFile = yaml.load(fileContents); console.log("Valid YAML file."); if (readFile.usage) { // 直接处理usage字符串,比如输出、渲染等 console.log("Usage content:", readFile.usage); } } catch (error) { console.error("Invalid YAML file.", error); }
额外说明
你提供的YAML示例中usage字段的多行文本格式完全正确(用|保留换行),报错和YAML文件本身无关,完全是代码逻辑错误导致的。
内容的提问来源于stack exchange,提问作者Alex Marple
相关产品推荐
相关产品推荐

