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

import org.yaml.snakeyaml.Yaml;

import java.util.LinkedHashMap;
import java.util.Map;

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

        String yaml2 = '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}';

        // 解析 YAML 字符串 1
        Yaml yaml = new Yaml();
        Map<String, Object> yaml1Data = yaml.load(yaml1);

        // 解析 YAML 字符串 2
        Map<String, Object> yaml2Data = yaml.load(yaml2);

        // 合并 YAML 数据
        Map<String, Object> mergedData = mergeYamlData(yaml1Data, yaml2Data);

        // 输出合并后的 YAML 字符串 3
        String yaml3 = yaml.dump(mergedData);
        System.out.println(yaml3);
    }

    private static Map<String, Object> mergeYamlData(Map<String, Object> data1, Map<String, Object> data2) {
        Map<String, Object> mergedData = new LinkedHashMap<>(data2);

        for (Map.Entry<String, Object> entry : data1.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();

            if (mergedData.containsKey(key)) {
                Object existingValue = mergedData.get(key);
                if (existingValue instanceof Map && value instanceof Map) {
                    // 递归合并嵌套的 Map
                    mergedData.put(key, mergeYamlData((Map<String, Object>) value, (Map<String, Object>) existingValue));
                } else {
                    // 覆盖已存在的值
                    mergedData.put(key, value);
                }
            } else {
                // 添加新的键值对
                mergedData.put(key, value);
            }
        }

        return mergedData;
    }
}

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

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################################################
deploy:
  url: 123456@.qq.com
  name: 123456
swagger:
  enabled: ${swaggerEnabled:false}

注意:上述代码使用 SnakeYAML 库来解析和操作 YAML 数据。在使用之前,需要将 SnakeYAML 库添加到项目的依赖中。可以在 Maven 或 Gradle 中添加以下依赖项:

Maven:

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.27</version>
</dependency>

Gradle:

implementation 'org.yaml:snakeyaml:1.27'
YAML 字符串合并:使用 Java 8 代码实现对比和覆盖

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

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