2014-10-07 56 views
3

我正在处理配置文件,所以我需要将JSON转换为YAML。 比如我有YAML文件:将JSON转换为YAML。解析JSON到YAML

{ 
    "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: "" 

你能帮助我吗?

回答

1

如果你需要转换的JSONObject到YAML(串)。你需要。首先得到json字符串,然后映射,然后你可以转换为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); 
+2

你能简单解释一下你的答案吗?你在哪里声明“jsonPrettyPrintString” – 2015-06-06 07:14:55

+0

我很抱歉迟到的回应,我编辑了答案。 @MurugesanEra – eabyshev 2016-03-15 13:49:27

+1

这段代码片段使用了什么框架/库? – 2016-12-09 20:24:48

-1

http://jsontoyaml.com/

本网站可能会帮助你。它可以在 猛砸, JavaScript的使用, JavaScript的(唯一的浏览器), 红宝石, Python和Perl的 , 的Java ..

+0

是的,我看到这个网站,但我需要在java代码... – eabyshev 2014-10-07 12:37:08

+0

我反对这个投票。没有提到提供“程序化方式”的问题,所以这个答案也是有效的。 – 2018-01-15 11:49:10

8

可以转换JSON与两行代码YAML它Jackson

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; 
    } 

} 

您将需要依赖添加到杰克逊的核心,而DataBind已DATAFORMAT YAML。下面是Gradle的一个片段:

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'