【问题标题】:Convert JSON to YAML. Parsing JSON to YAML将 JSON 转换为 YAML。将 JSON 解析为 YAML
【发布时间】:2014-10-07 11:51:18
【问题描述】:

我正在处理配置文件,因此我需要将 JSON 转换为 YAML。 例如我有这个 JSON 文件:

{
  "foo": "bar",
  "baz": [ "qux","quxx"],
  "corge": null,
  "grault": 1,
  "garply": true,
  "waldo": "false",
  "fred": "undefined",
  "emptyArray": [],
  "emptyObject": {},
  "emptyString": ""
}

结果应该是 YAML:

foo: "bar"
baz: 
  - "qux"
  - "quxx"
corge: null
grault: 1
garply: true
waldo: "false"
fred: "undefined"
emptyArray: []
emptyObject: {}
emptyString: ""

你能帮我吗?

【问题讨论】:

  • 根据YAML spec (section 1.3),“因此,YAML 可以被视为 JSON 的自然超集......”,并且“......每个 JSON 文件也是一个有效的 YAML 文件。”跨度>

标签: java json parsing yaml


【解决方案1】:

Jackson中的两行代码即可将JSON转为YAML:

import java.io.IOException;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;

public class Library {

    public String asYaml(String jsonString) throws JsonProcessingException, IOException {
        // parse JSON
        JsonNode jsonNodeTree = new ObjectMapper().readTree(jsonString);
        // save it as YAML
        String jsonAsYaml = new YAMLMapper().writeValueAsString(jsonNodeTree);
        return jsonAsYaml;
    }

}

您需要将依赖项添加到 Jackson Core、DataBind 和 DataFormat YAML。下面是 Gradle 的 sn-p:

compile 'com.fasterxml.jackson.core:jackson-core:2.8.6'
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.6'
compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.8.6'

【讨论】:

  • 为我省去了很多麻烦。很好的答案。
【解决方案2】:

这是一个文件的单行,适合粘贴在 bash 脚本中。这应该适用于大多数系统上的大多数默认 python:

python -c 'import json; import yaml; print(yaml.dump(json.load(open("inputfile"))))'

【讨论】:

  • 这个配方有效,但将其写入文件会更好。
【解决方案3】:

http://jsontoyaml.com/

这个网站可以帮助你。它可以用于 重击, JavaScript, JavaScript(仅限浏览器), 红宝石, Python, 珀尔, Java..

【讨论】:

  • 我反对对此投反对票。问题中没有提到提供“编程方式”所以这个答案也有效。
  • @PasinduJay 标签提供了必要的上下文 - 问题被标记为 Java。
【解决方案4】:

我建议您考虑Data Transformer(免责声明 - 我是它的开发者)。它在 JSON、YML 和其他格式之间进行转换。

您可以从Mac App StoreMicrosoft Store 获取。

【讨论】:

    【解决方案5】:
    function yaml_validate {
      python -c 'import sys, yaml, json; yaml.safe_load(sys.stdin.read())'
    }
    
    function yaml2json {
      python -c 'import sys, yaml, json; print(json.dumps(yaml.safe_load(sys.stdin.read())))'
    }
    
    function yaml2json_pretty {
      python -c 'import sys, yaml, json; print(json.dumps(yaml.safe_load(sys.stdin.read()), indent=2, sort_keys=False))'
    }
    
    function json_validate {
      python -c 'import sys, yaml, json; json.loads(sys.stdin.read())'
    }
    
    function json2yaml {
      python -c 'import sys, yaml, json; print(yaml.dump(json.loads(sys.stdin.read())))'
    }
    

    http://github.com/frgomes/bash-scripts 的更多 Bash 技巧

    【讨论】:

      【解决方案6】:

      如果您需要将 JSONobject 转换为 yaml(字符串)。你需要。首先获取json字符串,然后map,之后就可以转换成yaml了。 代码如下:

        // this is your json object
        JSONObject jsonobject = new JSONObject(map);
        // get json string
        String prettyJSONString = jsonobject.toString(4);
        // mapping
        Map<String,Object> map = (Map<String, Object>) yaml.load(prettyJSONString);
        // convert to yaml string (yaml formatted string)
        String output = yaml.dump(map2);
      

      【讨论】:

      • 你能简单解释一下你的答案吗?在哪里声明“jsonPrettyPrintString”
      • 对于迟到的回复真的很抱歉,我编辑了答案。 @MurugesanEra
      • 请解释一下yaml变量。
      • 这里应该经过哪张地图?如何将json字符串转换为map。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 2016-02-16
      • 1970-01-01
      • 2015-12-20
      • 2015-08-02
      • 1970-01-01
      • 2018-10-28
      相关资源
      最近更新 更多