【AI+编程】AI工具(通义灵码)编写yaml转换properties工具类思考

需求背景:由于公司安装的apollo比较老,虽然新版本已经支持yaml格式了,但升级apollo代价比较大,有个项目配置文件之前放在项目里基于yaml编写的,最近想切换到apollo存储配置文件。

先百度了下,找了一个在线网站 https://www.toyaml.com/ , 想了想 配置文件涉及到一些隐私,使用在线网站转码不是太安全。萌生写一个yaml转 properties的工具类想法。 这里以JAVA为例

【人工智能】为啥我最近很少写python编程文章了,浅谈AI+编程+RPA提升工作效率 在这篇文章中, 我已经在IntelliJ IDEA2023.3.4 中安装好通义灵码,下面就以idea中的通义灵码为例。

最初我不假思索直接提问: 请用java语言生成yaml转换properties工具类, 最后的结果可想而知,没达到自己想要的效果。

问题1、properties生成格式不正确。期望yaml包含多层树形结构,要求生成的properties也要使用多层。

问题2、properties生成的顺序杂乱无章,期望按照yaml的顺序

问题3:yaml里包含注释,AI没考虑到注释情况

通过一步一步调教,最后得到可运行的代码。示例如下:

import org.yaml.snakeyaml.Yaml;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
import org.yaml.snakeyaml.Yaml;

public class YamlToProps {

    public static void main(String[] args) throws IOException {

        String inputPath = "xxxx.yml";
        String outputPath = "xxxx.properties";

        convertYamlToProperties(inputPath, outputPath);


    }

    public static void convertYamlToProperties(String inputPath, String outputPath) throws IOException {
        // 读取 YAML 文件
        Yaml yaml = new Yaml();
        FileInputStream fis = new FileInputStream(inputPath);
        Reader reader = new InputStreamReader(fis, StandardCharsets.UTF_8);
        Map<String, Object> yamlContent = yaml.load(reader);

        // 使用扩展的 Properties 类存储结构化数据
        OrderedProperties props = new OrderedProperties();

        // 遍历 YAML 内容并转换到 Properties 中
        convertToProperties(yamlContent, "", props);

        // 保存到 properties 文件
        try (OutputStream output = new FileOutputStream(outputPath)) {
            props.store(output, null);
        }
    }

    private static void convertToProperties(Map<String, Object> content, String prefix, OrderedProperties props) {
        for (Map.Entry<String, Object> entry : content.entrySet()) {
            String key = prefix.isEmpty() ? entry.getKey() : prefix + "." + entry.getKey();
            Object value = entry.getValue();

            if (value instanceof Map) {
                // 处理内嵌 Map 结构
                convertToProperties((Map<String, Object>) value, key, props);
            } else if (value instanceof List) {
                // 如果值是列表,这里可以根据需求转换为逗号分隔的字符串或其他适合Properties的形式
                // 示例:props.put(key, String.join(",", (List<String>) value));
            } else {
                // 添加常规键值对
                props.put(key, value.toString());
            }
        }
    }

    // 自定义扩展 Properties 类以保持顺序
    static class OrderedProperties extends LinkedHashMap<String, String> {

        public synchronized Enumeration<Object> keys() {
            return Collections.enumeration(new ArrayList<>(keySet()));
        }

        public void store(OutputStream out, String comments) throws IOException {
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out,  StandardCharsets.UTF_8));
            if (comments != null && !comments.isEmpty()) {
                bw.write("# " + comments.replace("\n", "\n# "));
                bw.newLine();
            }
            for (Map.Entry<String, String> entry : this.entrySet()) {
                bw.write(entry.getKey() + "=" + entry.getValue());
                bw.newLine();
            }
            bw.flush();
        }
    }
}

代码生成好后,代码执行得到自己想要的工具类。

其实我们会发现, AI需要我们提供准确的话术才能一步步达到自己想要的结果,我们要对它提要求 和验收标准。 这就和产品经理给程序员提需求一样, 我们好比一个产品经理,AI工具相当于开发工程师, 如果产品经理提需求不具体,由于每个人的思维理解不一致(包括产品经理、开发工程师、测试工程师),可能做出来的东西和需求方不一样。需求细节沟通在项目整个过程中,真的很重要。

我最后想说,AI工具只是辅助, 我们的大脑思维才是 解决问题的关键。

原文链接:https://mp.weixin.qq.com/s?__biz=MzI5NDAzNzExNw==&mid=2247484322&idx=1&sn=bc8d3f2cfdee902875cfb4a82e31598b&chksm=ec69b0b0db1e39a62c271cf9e41bf4aa71d0468cad339880461763f5833deaa5afb83fa6bd76&token=2090601571&lang=zh_CN#rd

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java YAML工具类是一种用于处理YAML格式文件的工具类,可以方便地读取、写入和操作YAML文件。 Java中有许多开源的第三方库可以用来处理YAML文件,比如SnakeYAML、Jackson、YAMLBeans等。这些库提供了完整的API和功能,可以帮助开发人员处理YAML文件的各种操作。 使用Java YAML工具类,我们可以通过简单的代码实现读取YAML文件的功能。通过调用相应的方法,我们可以将YAML文件的内容读取到一个Java对象中,然后进行相应的操作和处理。同时,我们也可以将Java对象以YAML格式写入到文件中,或者将Java对象转换YAML字符串进行传输或存储。 Java YAML工具类还提供了更高级的功能,比如支持对象的序列化和反序列化、自定义类型映射、错误处理等。我们可以通过配置相应的参数和监听器来实现这些功能。 总之,Java YAML工具类可以方便地处理YAML格式文件,在Java应用中起到了重要的作用。无论是读取配置文件、解析数据文件还是进行数据交换,Java YAML工具类都是一个很好的选择。 ### 回答2: Java开发中,YAMLYAML Ain't Markup Language)是一种轻量级的数据序列化格式,与JSON和XML类似,但更加直观和易读。为了在Java中处理YAML格式的数据,可以使用Java YAML工具类。 Java YAML工具类是一个用于读取和写入YAML文件的工具类。它提供了简单易用的API,使得在Java程序中处理YAML数据变得非常方便。 对于读取YAML文件,Java YAML工具类通常提供了以下几个步骤: 1. 创建一个YAML Parser对象,用于解析YAML文件。 2. 使用YAML Parser对象的API读取YAML文件的内容。通过提供文件路径或输入流,可以将YAML文件解析成Java对象。 3. 将解析后的Java对象用于后续的数据处理。 对于写入YAML文件,Java YAML工具类可以使用以下步骤: 1. 创建一个YAML Writer对象,用于将数据写入YAML文件。 2. 使用YAML Writer对象的API将Java对象转换YAML格式的字符串。 3. 将YAML格式的字符串写入目标文件。 Java YAML工具类通常提供了丰富的API,可以处理各种类型的数据,包括基本数据类型、对象、集合等。它还支持注释、多文档以及一些高级特性,如引用和锚点。 Java YAML工具类的使用可以大大简化YAML数据的处理过程,提高开发效率。同时,它还能够保持YAML数据的格式和结构,使得程序的逻辑更加清晰易读。 综上所述,Java YAML工具类是一种用于读取和写入YAML文件的工具类,通过简单易用的API,可以在Java程序中方便地处理YAML格式的数据。它能够保持YAML数据的格式和结构,提高开发效率和代码可读性。 ### 回答3: Java中的YAML工具类是一种用于读取和写入YAML文件的工具YAMLYAML Ain't Markup Language)是一种人类可读的数据序列化格式,与JSON类似,但更易于阅读和编辑。 使用Java的YAML工具类,我们可以轻松地读取YAML文件并将其转换为Java对象,或者将Java对象转换YAML格式。 在使用YAML工具类之前,我们需要引入相应的依赖库。常见的Java YAML库有SnakeYAML和Jackson YAML等。 例如,使用SnakeYAML库,可以使用以下代码读取YAML文件并转换为Java对象: ```java import org.yaml.snakeyaml.Yaml; import java.io.FileInputStream; public class Main { public static void main(String[] args) throws Exception { // 读取YAML文件 Yaml yaml = new Yaml(); FileInputStream inputStream = new FileInputStream("data.yaml"); Object data = yaml.load(inputStream); // 将YAML数据转换为Java对象 MyClass myObject = (MyClass) data; // 使用Java对象 System.out.println(myObject.getName()); } } class MyClass { private String name; // getter和setter方法 } ``` 上述代码首先创建了一个Yaml对象,然后通过FileInputStream读取了名为"data.yaml"的YAML文件。load方法将YAML数据加载到一个Java对象中,然后我们可以使用这个Java对象。 此外,我们还可以将Java对象转换YAML格式并写入YAML文件。例如,使用上述的MyClass对象,可以使用以下代码将其转换YAML格式并写入文件: ```java import org.yaml.snakeyaml.Yaml; import java.io.FileWriter; public class Main { public static void main(String[] args) throws Exception { // 创建Java对象 MyClass myObject = new MyClass(); myObject.setName("John"); // 将Java对象转换YAML Yaml yaml = new Yaml(); String output = yaml.dump(myObject); // 将YAML写入文件 FileWriter writer = new FileWriter("output.yaml"); writer.write(output); writer.close(); } } class MyClass { private String name; // getter和setter方法 } ``` 上述代码将创建一个名为"John"的MyClass对象,并将其转换YAML格式。然后,通过FileWriter将YAML数据写入名为"output.yaml"的文件中。 总之,Java的YAML工具类使我们能够轻松地读取和写入YAML文件,以及将YAML数据转换为Java对象和反之。这为处理YAML格式的数据提供了便利和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值