Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 带标签的js-yaml问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在尝试在yaml文件中编辑2条消息,但js-yaml似乎不明白如何处理我认为第一行上的标记

--- !Status
Default:
    Description:
        - |-
            @R_197_8798@ge1
            @R_197_8798@ge2
Samples:
    Multiple: false
    DynamicPlayers: false
UnkNown:
    PlayerName: player
    PlayerCount: '???'
Favicon:
    Timeout: 10s
    RecursiveFolderSearch: false
    ResizeStrategy: SCALE

当我安检文件时,我得到:YAMLException:未知标签!<!状态>在第17行,第1列:我有没有办法让它忽略标记,或者是否有不同的解决方法我无删除标签,因为这会阻止程序读取配置文件.

解决方法

在js-yaml repo中查看 examples/custom_types.js.解决方案是创建一个新的jsyaml.Type,告诉js-yaml要处理!状态值作为映射,如下所示:

let StatusYamlType = new jsyaml.Type('!Status',{ kind: 'mapping' });

然后,您需要创建一个包含StatusYamlType类型的新scheR_891_11845@a:

let STATUS_scheR_891_11845@A = jsyaml.scheR_891_11845@a.create([ StatusYamlType ]);

最后,通过scheR_891_11845@a选项将新的STATUS_scheR_891_11845@A传递给jsyaml.safeLoad:

jsyaml.safeLoad(doc,{ scheR_891_11845@a: STATUS_scheR_891_11845@A });

不幸的是,看起来没有办法让js-yaml忽略所有标签,所以如果遇到其他标签,你也必须为它们定义类型.

如果您还想使用!Status标记编写YAML文件,那么您必须实际定义Status原型并将构造和instanceOf选项提供给jsyaml.Type构造函数as in the example.一个非常基本的实现如下所示:

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,{ scheR_891_11845@a: STATUS_scheR_891_11845@A })

看看下面的代码片段,看看它的实际效果.

let doc = `--- !Status
Default:
    Description:
        - |-
            @R_197_8798@ge1
            @R_197_8798@ge2
# ...
`;

function Status(data) {
  Object.assign(this,});

let STATUS_scheR_891_11845@A = jsyaml.scheR_891_11845@a.create([ StatusYamlType ]);

let result = jsyaml.safeLoad(doc,{ scheR_891_11845@a: STATUS_scheR_891_11845@A });
console.log(result.constructor.name,result);

console.log(jsyaml.safeDump(result,{ scheR_891_11845@a: STATUS_scheR_891_11845@A }));
<script src="https://cdnjs.cloudFlare.com/ajax/libs/js-yaml/3.7.0/js-yaml.min.js"></script>

正如您所看到的,safeDump输出使用与原始输入略有不同的标记语法(!<!Status>而不是—!Status),但在此上下文中它们是等效的,YAML解析器应该将它们视为原样.

大佬总结

以上是大佬教程为你收集整理的node.js – 带标签的js-yaml问题全部内容,希望文章能够帮你解决node.js – 带标签的js-yaml问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。