在nodejs中将yaml文件转换为json

在nodejs中将yaml文件转换为json,json,node.js,yaml,Json,Node.js,Yaml,我的项目中有一个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时,我不会得到&白色。这可能是因为它在转换时

我的项目中有一个
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
时,我不会得到
&白色
。这可能是因为它在转换时忽略了特殊字符。但是我需要在我的
json
中使用它们

node.js
code:

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文档中的注释也是如此

在我看来,您不需要作为锚定
和白色
一部分的字符串
color white
。您应该使用 浏览与
颜色关联的值映射的键。这将是
白色
黑色
,您可以轻松地从这些组合键创建字符串
白色
黑色
(并找到相关的颜色值)


这样,您就不必更改YAML文档(您可能无法完全控制该文档),也不必像@greuze建议的那样对字符串
“&color-neutral-20\”进行特殊解析。

非常感谢您的回复。如果我们这样做,那将是一个有效的Yaml吗?是的,当然,值是字符串,包含转义引号,一切都很好。一个更简单、更可读的选项是用反斜杠转义初始的
&
字符:
白色:\&color白色“\35; FFFFFF”