yaml,json,properties相互转工具类(Java)

作者:cndz 围观群众:1177 更新于 标签:Java工具类yamljsonproperties转换工具类

maven引入

   <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
            <version>2.14.0-rc3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-properties -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-properties</artifactId>
            <version>2.14.0-rc3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.7</version>
        </dependency>

主要功能

  • json转properties
  • json转yaml
  • yaml转json
  • yaml转properties
  • properties转yaml
  • properties转json

代码

package com.demo.utils;

import cn.hutool.core.bean.BeanPath;
import cn.hutool.core.comparator.CompareUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.javaprop.JavaPropsMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import com.fasterxml.jackson.dataformat.yaml.util.StringQuotingChecker;
import lombok.SneakyThrows;

import java.nio.charset.StandardCharsets;
import java.util.Properties;

/**
 * @author:zzy
 * @date:Created in 2023/5/3 19:29
 * @modified By:zzy
 */
public class ContentConverUtil {
    private static ObjectMapper getYamlMappper() {
        YAMLFactory yamlFactory = YAMLFactory.builder()
                .enable(YAMLGenerator.Feature.MINIMIZE_QUOTES)
                .disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)
                .stringQuotingChecker(new StringQuotingChecker.Default() {
                    private static final long serialVersionUID = 1324053635146744895L;
                    @Override
                    public boolean needToQuoteValue(String value) {
                        return false;
                    }
                }).build();
        return new YAMLMapper(yamlFactory);
    }

    /**
     * properties转yaml
     * @param propertiesContent
     * @return
     */
    @SneakyThrows
    public static String propertiesToYaml(String propertiesContent) {
        if(StrUtil.isBlank(propertiesContent)) {return propertiesContent;}

        //仅有单层的map
        Properties properties = new Properties();
        properties.load(IoUtil.toStream(propertiesContent.getBytes(StandardCharsets.UTF_8)));

        //具体层级的Map
        Dict propertiesDict = Dict.create();
        properties.entrySet().stream()
                .sorted((mapEntry1,mapEntry2) -> -CompareUtil.compare(Convert.toStr(mapEntry1.getKey()).length(), Convert.toStr(mapEntry2.getKey()).length()))
                .forEach(mapEntry -> {
                    Object KeyName = mapEntry.getKey();
                    Object keyValue = mapEntry.getValue();
                    BeanPath.create(KeyName.toString()).set(propertiesDict,keyValue);
                });

        ObjectMapper yamlMapper = getYamlMappper();
        return yamlMapper.writeValueAsString(propertiesDict);
    }

    /**
     * yaml转properties
     * @param yamlContent
     * @return
     */
    @SneakyThrows
    public static String yamlToProperties(String yamlContent) {
        YAMLMapper yamlMapper = new YAMLMapper();

        JsonNode jsonNode = yamlMapper.readTree(yamlContent);
        JSONObject entries = JSONUtil.parseObj(jsonNode.toString());

        JavaPropsMapper mapper = new JavaPropsMapper();
        return mapper.writeValueAsString(entries);
    }


    /**
     * json转properties
     * @param json
     * @return
     */
    @SneakyThrows
    public static String jsonToProperties(String json) {
        if(JSONUtil.isTypeJSON(json)) {
            JavaPropsMapper javaPropsMapper = new JavaPropsMapper();
            JSONObject jsonObject = JSONUtil.parseObj(json);
            return javaPropsMapper.writeValueAsString(jsonObject);
        }
        return null;
    }

    /**
     * properties转json
     * @param propertiesContent
     * @return
     */
    @SneakyThrows
    public static String propertiesToJson(String propertiesContent) {
        if(StrUtil.isBlank(propertiesContent)) {return propertiesContent;}

        //仅有单层的map
        Properties properties = new Properties();
        properties.load(IoUtil.toStream(propertiesContent.getBytes(StandardCharsets.UTF_8)));

        //具体层级的Map
        Dict propertiesDict = Dict.create();
        properties.entrySet().stream()
                .sorted((mapEntry1,mapEntry2) -> -CompareUtil.compare(Convert.toStr(mapEntry1.getKey()).length(), Convert.toStr(mapEntry2.getKey()).length()))
                .forEach(mapEntry -> {
                    Object KeyName = mapEntry.getKey();
                    Object keyValue = mapEntry.getValue();
                    BeanPath.create(KeyName.toString()).set(propertiesDict,keyValue);
                });

        return JSONUtil.toJsonPrettyStr(propertiesDict);
    }


    /**
     * json转yaml
     * @param json
     * @return
     */
    @SneakyThrows
    public static String jsonToYaml(String json) {
        if(JSONUtil.isTypeJSON(json)) {
            ObjectMapper yamlMappper = getYamlMappper();
            JSONObject jsonObject = JSONUtil.parseObj(json);
            return yamlMappper.writeValueAsString(jsonObject);
        }
        return null;
    }

    /**
     * yaml转json
     * @param yaml
     * @return
     */
    @SneakyThrows
    public static String yamlToJson(String yaml) {
        if(StrUtil.isBlank(yaml)) { return yaml;}
        YAMLMapper yamlMapper = new YAMLMapper();
        JsonNode jsonNode = yamlMapper.readTree(yaml);
        return JSONUtil.formatJsonStr(jsonNode.toString());
    }

}
加入收藏