背景
由于工作任务需要,需将json格式的数据转换成yaml格式,然后再进行一系列的数据处理。记录一下,以后当个拿来即用的工具使用。
代码实现
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
JSON转YAML:
public static void main(String[] args) {
try {
// JSON字符串
String json = "{"country":"China","zoneId":"beijing","userInfo":[{"order":1,"userName":"ZhangSan","gender":"man","carConfigs":[{"order":1,"brand":"Audi","color":"black"},{"order":2,"brand":"Benz","color":"white"}],"gmtCreate":1729588263000,"gmtModified":1729588263000}]}";
// 使用Jackson解析JSON字符串为JsonNode对象
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(json);
// 将JsonNode转换为Map,因为SnakeYAML可以直接处理Map转换为YAML
Map<String, Object> map = objectMapper.convertValue(jsonNode, Map.class);
// 配置SnakeYAML的输出格式选项
DumperOptions options = new DumperOptions();
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); // 设置输出格式为块风格,而不是流风格
Yaml yaml = new Yaml(options);
// 将Map转换为YAML字符串
StringWriter out = new StringWriter();
yaml.dump(map, out);
System.out.println(out); // 输出YAML字符串
} catch (Exception e) {
e.printStackTrace();
}
}
YAML转JSON:
public static void main(String[] args) {
try {
Yaml yaml = new Yaml();
FileInputStream inputStream = new FileInputStream("src/main/resource/application.yml"); // 读取YAML文件
Map<String, Object> data = yaml.load(inputStream); // 解析YAML文件
UserRegisterInfoDO userRegisterInfoDO = JSON.parseObject(JSON.toJSONString(obj), UserRegisterInfoDO.class);
System.out.println(JSON.toJSONString(userRegisterInfoDO)); // 输出解析结果
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
两种格式展示
json格式:
{
"country": "China",
"zoneId": "beijing",
"userInfo": [{
"order": 1,
"userName": "zhangsan",
"gender": "man",
"carConfigs": [{
"order": 1,
"brand": "Audi",
"color": "black"
}, {
"order": 2,
"brand": "Benz",
"color": "white"
}],
"gmtCreate": 1729588263000,
"gmtModified": 1729588263000
}]
}
yaml格式:
country: China
zoneId: beijing
userInfo:
- order: 1
userName: ZhangSan
gender: man
carConfigs:
- order: 1
brand: Audi
color: black
- order: 2
brand: Benz
color: white
gmtCreate: 1729588263000
gmtModified: 1729588263000