我只想将包含yaml的字符串转换为另一个字符串,该字符串包含使用Java的corrseponding转换后的json.
例如,我有这个yaml的内容
---
paper:
uuid: 8a8cbf60-e067-11e3-8b68-0800200c9a66
name: On formally undecidable propositions of Principia Mathematica and related systems I.
author: Kurt Gödel.
tags:
- tag:
uuid: 98fb0d90-e067-11e3-8b68-0800200c9a66
name: Mathematics
- tag:
uuid: 3f25f680-e068-11e3-8b68-0800200c9a66
name: Logic
Run Code Online (Sandbox Code Playgroud)
在名为yamlDoc的String中:
String yamlDoc = "---\npaper:\n uuid: 8a... etc...";
Run Code Online (Sandbox Code Playgroud)
我想要一些方法,可以将yaml String转换为另一个带有相应json的String,即下面的代码
String yamlDoc = "---\npaper:\n uuid: 8a... etc...";
String json = convertToJson(yamlDoc); // I want this method
System.out.println(json);
Run Code Online (Sandbox Code Playgroud)
应该打印:
{
"paper": {
"uuid": "8a8cbf60-e067-11e3-8b68-0800200c9a66",
"name": "On formally undecidable propositions of Principia Mathematica and related systems I.",
"author": "Kurt Gödel."
},
"tags": [
{
"tag": {
"uuid": "98fb0d90-e067-11e3-8b68-0800200c9a66",
"name": "Mathematics"
}
},
{
"tag": {
"uuid": "3f25f680-e068-11e3-8b68-0800200c9a66",
"name": "Logic"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想知道在这个例子中是否存在类似于convertToJson()方法的东西.
Yaml yaml = new Yaml();
Map<String,Object> map = (Map<String, Object>) yaml.load(yamlDoc);
Run Code Online (Sandbox Code Playgroud)
构造包含已解析的YAML结构的地图(使用嵌套的地图).然后,如果有一个可以将地图转换为json字符串的解析器,它将解决我的问题,但我也没有找到类似的东西.
任何回复将不胜感激.
Cor*_*ein 42
这是一个使用Jackson的实现:
String convertYamlToJson(String yaml) {
ObjectMapper yamlReader = new ObjectMapper(new YAMLFactory());
Object obj = yamlReader.readValue(yaml, Object.class);
ObjectMapper jsonWriter = new ObjectMapper();
return jsonWriter.writeValueAsString(obj);
}
Run Code Online (Sandbox Code Playgroud)
要求:
compile('com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.7.4')
Run Code Online (Sandbox Code Playgroud)
Mig*_*sco 10
感谢HotLicks提示(在问题评论中)我终于以这种方式使用库org.json和SnakeYAML实现了转换:
private static String convertToJson(String yamlString) {
Yaml yaml= new Yaml();
Map<String,Object> map= (Map<String, Object>) yaml.load(yamlString);
JSONObject jsonObject=new JSONObject(map);
return jsonObject.toString();
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否是最好的方法,但它对我有用.
小智 5
非常感谢米格尔·卡拉斯科(Miguel A. Carrasco),他实际上已经解决了这个问题。但他的版本是有限制性的。如果 root 是列表或原始值,他的代码就会失败。最通用的解决方案是:
private static String convertToJson(String yamlString) {
Yaml yaml= new Yaml();
Object obj = yaml.load(yamlString);
return JSONValue.toJSONString(obj);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30686 次 |
| 最近记录: |