将yaml文件转换为nodejs中的json

我的项目中有一个edit.yml文件。 这是yaml文件:

 color : white : &color-white "#FFFFFF" black : &color-black "#262626" neutral : 20 : &color-neutral-20 "#222222" 90 : &color-neutral-90 "#EEEEEE" 

所以当我使用node.js下面的代码转换成json ,我没有得到&color-white 。 这可能是因为它在转换时省略了特殊字符。 但我需要他们在我的json

node.js代码:

 var fs = require('fs'); const yaml1 = require('js-yaml'); const YAML = require('yamljs'); module.exports = { save : function(item) { fs.writeFile('edit1.yml',YAML.stringify(item,4),function(err,item){ if(err) { } }); }, load : function() { var data = yaml1.safeLoad(fs.readFileSync('edit0.yml','utf8')); var indentedJson = JSON.stringify(data, null, 4); return indentedJson; } }; 

YAML模块工作正常,问题在于你的YAML。 这是一个有效的文件,但也许它不是你想要的。

让我引用YAML规范的一部分:

重复的节点(对象)首先由一个锚(用&符号 – “&”标记)标识,然后用别名(用星号“*”表示)。

在你的例子中, color-white是该节点的别名,可以用在yaml文件的其余部分。

如果您需要符号( & )符号后的文本位于JSON文件中,则可以使用如下的yaml文件:

 color : white : "&color-white \"#FFFFFF\"" black : "&color-black \"#262626\"" neutral : 20 : "&color-neutral-20 \"#222222\"" 90 : "&color-neutral-90 \"#EEEEEE\"" 

这将返回一个JSON,如:

 { "color": { "white": "&color-white \"#FFFFFF\"", "black": "&color-black \"#262626\"" }, "neutral": { "20": "&color-neutral-20 \"#222222\"", "90": "&color-neutral-90 \"#EEEEEE\"" } } 

所以json.color.white将是&color-white "#FFFFFF"

您的文件中的YAML是包含锚点的文档。

这种锚通常用于倾倒直接或间接的自我指涉结构。 但是,您的示例不包含引用这些锚点的别名。

YAML规范的重要部分在以上链接部分:

否则,锚点名称是序列化细节,一旦完成组合就会被丢弃

因此,加载后不应依赖锚名称,而不用于传递信息。 YAML文档中的注释也是一样的。

国际海事组织你不认为你需要stringcolor-white是锚&color-white 。 您应该通过遍历与color关联的值的映射关键字来从关键color组成该string。 这将是whiteblack ,您可以轻松地创build从这些组合键color-whitecolor-black的string(并find相关的颜色值)。

这样,您不必更改YAML文档,您可能没有完全控制,而且您不必对"&color-neutral-20 \"#222222\""string进行特殊parsing,格鲁兹build议你应该这样做。