如何在JavaScript中将JSON转换为YAML

26
我想在JavaScript中将JSON字符串转换为YAML格式。我在谷歌上搜索了两天,但没有找到任何解决方案或库。虽然有Java的答案,但没有JavaScript的答案。
假设我有一个像这样的JSON字符串:
{
  "json": [
    "fat and rigid"
  ],
  "yaml": [
    "skinny and flexible"
  ],
  "object": {
    "array": [
      {
        "null_value": null
      },
      {
        "boolean": true
      },
      {
        "integer": 1
      }
    ]
  }
}

转换为yaml格式:

json:
  - fat and rigid
yaml:
  - skinny and flexible
object:
  array:
    - null_value:
    - boolean: true
    - integer: 1

有一个在线转换器http://www.json2yaml.com/,但我如何在JavaScript中进行转换?


4
YAML是JSON的超集:任何有效的JSON也都是有效的YAML;你可能不需要进行任何转换。 - Jacob
2
谷歌搜索“npm Json to yaml”,有超过六个库。 - Will
@Jacob谢谢你,你能否将其添加为答案,以便任何人来查看正确的答案并受益或节省他们的一天? - sandeepKumar
删除了我的回答,因为它收到了太多的踩。但我仍然坚持我的观点。如果你的代码需要 YAML 输入,而你只有 JSON,你不必将 JSON 转换为 YAML。这是一个合理的情况,你不需要进行转换。如果你只是想转换是因为你喜欢语法(为什么?!),请参考其他解决方案。 - Jacob
5个回答

20

你可以使用 yaml NPM 包。

const YAML = require('yaml');

const jsonObject = {
    version: "1.0.0",
    dependencies: {
        yaml: "^1.10.0"
    },
    package: {
        exclude: [ ".idea/**", ".gitignore" ]
    }
}

const doc = new YAML.Document();
doc.contents = jsonObject;

console.log(doc.toString());

输出

version: 1.0.0
dependencies:
  yaml: ^1.10.0
package:
  exclude:
    - .idea/**
    - .gitignore

3
YAML包现在包括一个stringify()方法,所以你只需执行YAML.stringify(jsonObject)即可获得相同的结果。请查看文档此处 - Jeff Gardner

15

您可以使用 'js-yaml' npm 包。它是由 yaml.org 正式认可的。

然后,您可以使用以下方法从对象生成 YAML 字符串:

yaml.dump(JSON.parse("yourJsonString"));

此方法的完整文档可在此处查看:dump()


4
可以请您添加一个如何使用js-yaml解析的示例吗?我尝试使用yaml.parse(),但它已经被弃用了。 - omer
7
将JSON字符串转换为YAML字符串,可使用以下代码:yaml.dump(<你的对象>)。这样做可以节省5m的空间。回答@omer的问题。 - Dave
确保将对象传递给dump函数(而不是字符串——在我的情况下,我不得不使用dump(JSON.parse(...)))。 - Łukasz K
“js-yaml”和“yaml”有什么区别?我看到前者每周下载量是后者的两倍,但已经两年没有更新了。 - Annan Yearian

9

2
这是如何做到的:)
import * as YAML from 'yaml';
const YAMLfile = YAML.stringify(JSONFILE);

如果你想创建一个YAML文件,你可以使用FS来完成。

import * as fs from 'fs';
fs.writeFileSync('./fileName.yaml', YAMLfile); 

1
我尝试将答案打包成一个Bash脚本。

原始回答翻译成“最初的回答”。

#!/bin/bash
#convert-json-to-yaml.sh

if [[ "$1" == "" ]]; then
    echo "You must provide a json file in argument i.e. ./convert-json-to-yaml.sh your_file.json"
    exit 1
fi

jsonFile=$1
yamlFile="$1.yaml"

if [[ "$2" != "" ]]; then
    yamlFile=$2
fi

python -c 'import sys, yaml, json; yaml.safe_dump(json.load(sys.stdin), sys.stdout, default_flow_style=False)' < ${jsonFile} > ${yamlFile}

这很棒,我要试一试。 - Andrew Ross

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接