【Java】JSON和YAML的相互转换

116 阅读1分钟

背景

由于工作任务需要,需将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