Node.js 带标签的js yaml问题
我目前正在尝试编辑yaml文件中的2条消息,但js yaml似乎不明白如何处理我认为第一行上的标记:Node.js 带标签的js yaml问题,node.js,yaml,Node.js,Yaml,我目前正在尝试编辑yaml文件中的2条消息,但js yaml似乎不明白如何处理我认为第一行上的标记: --- !Status Default: Description: - |- Message1 Message2 Samples: Multiple: false DynamicPlayers: false Unknown: PlayerName: player PlayerCount: '?
--- !Status
Default:
Description:
- |-
Message1
Message2
Samples:
Multiple: false
DynamicPlayers: false
Unknown:
PlayerName: player
PlayerCount: '???'
Favicon:
Timeout: 10s
RecursiveFolderSearch: false
ResizeStrategy: SCALE
当我安全加载文档时,我得到:YAMLException:未知标记!在第17行第1列:
我有没有办法让它忽略标记,或者有没有其他方法解决这个问题?我无法删除标记,因为这样会阻止程序读取配置文件。请查看js yaml repo中的内容。解决方案是创建一个新的jsyaml.Type
,告诉jsyaml处理!状态
值作为映射,如下所示:
let StatusYamlType = new jsyaml.Type('!Status', { kind: 'mapping' });
然后,您需要创建一个新的模式,其中包括StatusYamlType
类型:
let STATUS_SCHEMA = jsyaml.Schema.create([ StatusYamlType ]);
最后,通过SCHEMA
选项将新的STATUS\u SCHEMA
传递给jsyaml.safeLoad
:
jsyaml.safeLoad(doc, { schema: STATUS_SCHEMA });
不幸的是,似乎没有办法让js yaml忽略所有标记,所以如果遇到其他标记,也必须为它们定义类型
如果您还想用编写YAML文件!Status
标记然后您必须实际定义一个Status原型,并向jsyaml.Type
构造函数提供construct
和instanceOf
选项。一个非常基本的实现如下所示:
function Status(data) {
Object.assign(this, data);
}
let StatusYamlType = new jsyaml.Type('!Status', {
kind: 'mapping',
instanceOf: Status,
construct: data => new Status(data),
});
然后将模式传递给jsyaml.safeDump
,就像传递给safeLoad
一样:
jsyaml.safeDump(result, { schema: STATUS_SCHEMA })
看看下面的代码片段,看看它的实际作用
让doc=`--!地位
违约:
说明:
- |-
信息1
信息2
# ...
`;
功能状态(数据){
分配(此,数据);
}
让StatusYamlType=new jsyaml.Type(“!Status”{
种类:'映射',
instanceOf:状态,
构造:数据=>新状态(数据),
});
让STATUS_SCHEMA=jsyaml.SCHEMA.create([StatusYamlType]);
让result=jsyaml.safeLoad(doc,{schema:STATUS_schema});
console.log(result.constructor.name,result);
log(jsyaml.safeDump(结果,{schema:STATUS_schema}))代码>
在Visual Studio代码中编辑AWS云形成模板时,我遇到了同样的问题
我发现,在用户设置中,如果我在user-settings.json中添加以下代码行,就允许标记
"yaml.customTags": [
"!Equals sequence",
"!FindInMap sequence",
"!GetAtt",
"!GetAZs",
"!ImportValue",
"!Join sequence",
"!Ref",
"!Select sequence",
"!Split sequence",
"!Sub"
]
你的将遵循同样的结构<代码>“!状态序列”
这会告诉YAML配置确切的预期内容。在哪里可以找到用户设置。json?Mac:Code>Preferences>settings。。。在页面的右上角有一个
{}
,这将使您以JSON的形式进入设置。添加此块并保存更改。我想除了顶部的菜单栏之外,Windows的体验是类似的。我会在编辑>首选项下进行检查。VSCode的?我希望在命令行上使用jsyaml来读取云形成模板。谢谢