可以使用Java中的YAML库来解析和操作YAML字符串。以下是一个使用SnakeYAML库的示例代码,可以实现对比并合并两个YAML字符串:

import org.yaml.snakeyaml.Yaml;

import java.util.HashMap;
import java.util.Map;

public class YamlComparator {
    public static void main(String[] args) {
        String yaml1 = "deploy:\n" +
                "  url: 123456@.qq.com\n" +
                "  name: 123456\n" +
                "swagger:\n" +
                "  enabled: ${swaggerEnabled:false}";

        String yaml2 = "server:\n" +
                "  port: 50012\n" +
                "  tomcat:\n" +
                "    uri-encoding: UTF-8\n" +
                "  servlet:\n" +
                "    context-path: /api/ts-dc\n" +
                "spring:\n" +
                "  profiles:\n" +
                "    active:\n" +
                "      - ${profileName:prod}\n" +
                "  servlet:\n" +
                "    multipart:\n" +
                "      max-file-size: 100MB\n" +
                "      max-request-size: 100MB\n" +
                "  ######################################mysql基础数据库-需要修改链接 start################################################\n" +
                "swagger:\n" +
                "  # 是否开启swagger\n" +
                "  enabled: ${swaggerEnabled:false}";

        Map<String, Object> yaml1Map = new Yaml().load(yaml1);
        Map<String, Object> yaml2Map = new Yaml().load(yaml2);

        Map<String, Object> mergedMap = mergeYamlMaps(yaml1Map, yaml2Map);

        String mergedYaml = new Yaml().dump(mergedMap);
        System.out.println(mergedYaml);
    }

    private static Map<String, Object> mergeYamlMaps(Map<String, Object> yaml1Map, Map<String, Object> yaml2Map) {
        Map<String, Object> mergedMap = new HashMap<>(yaml2Map);

        for (Map.Entry<String, Object> entry : yaml1Map.entrySet()) {
            if (!mergedMap.containsKey(entry.getKey())) {
                mergedMap.put(entry.getKey(), entry.getValue());
            }
        }

        return mergedMap;
    }
}

运行以上代码,将会输出合并后的YAML字符串:

server:
  port: 50012
  tomcat:
    uri-encoding: UTF-8
  servlet:
    context-path: /api/ts-dc
spring:
  profiles:
    active:
    - ${profileName:prod}
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB
      ######################################mysql基础数据库-需要修改链接 start################################################
  swagger:
    # 是否开启swagger
    enabled: ${swaggerEnabled:false}
deploy:
  url: 123456@.qq.com
  name: 123456
swagger:
  enabled: ${swaggerEnabled:false}

可以看到,合并后的YAML字符串中包含了原有两个字符串的内容,并且对于不存在于第二个字符串中的变量也进行了新增。

Java代码实现YAML字符串对比合并

原文地址: https://www.cveoy.top/t/topic/qeJw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录