java 解析yml文件,生成对象

基础知识

先了解ymal中的组织形式,这篇文章很不错:

https://www.cnblogs.com/sddai/p/9626392.html

demo

ymal文件

age: 18
say: hellp
height: 180
#sports: basketball,football,pingpongball  # not supported this way of writing
sports: [basketball, football, pingpongball]
foods:
  - noodles
  - hamburger
#idols:                                   # not supported this way of writing
#  idol:
#    - name: Roger Federer
#      height: 185
#      gender: male
#    - name: Steve Jobs
#      height: 188
#      gender: male
idols:
  - name: Roger Federer
    height: 185
    gender: male
  - name: Steve Jobs
    height: 188
    gender: male
teachers:
  - { name: Ms. Liu, height: 165, gender: female}
  - { name: Mr. Li, height: 174, gender: male}

引入yml解析包:

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

主类:

public class YmlLoadTest {
    public static void main(String[] args) {
        String path = "F:\\CmdArgsResolution\\src\\main\\resources\\configs\\config.yml";
        YmlPojo ymlPojo = YmlLoader.loadFile(path, YmlPojo.class);
        System.out.println(ymlPojo);
    }
}

工具类:

package org.jfqqqq.test.util;

import org.yaml.snakeyaml.Yaml;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class YmlLoader {
    public static <T>T loadFile(String path, Class<T> clazz) {
        Yaml yaml = new Yaml();
        try {
            InputStream inputStream = new FileInputStream(path);
            return yaml.loadAs(inputStream, clazz);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

pojo若干:

public class YmlPojo extends Arg {
    private String[] sports;
    private List<String> foods;
    private List<Idol> idols;
    private Teacher[] teachers;

    public String[] getSports() {
        return sports;
    }

    public void setSports(String[] sports) {
        this.sports = sports;
    }

    public List<String> getFoods() {
        return foods;
    }

    public void setFoods(List<String> foods) {
        this.foods = foods;
    }

    public List<Idol> getIdols() {
        return idols;
    }

    public void setIdols(List<Idol> idols) {
        this.idols = idols;
    }

    public Teacher[] getTeachers() {
        return teachers;
    }

    public void setTeachers(Teacher[] teachers) {
        this.teachers = teachers;
    }

    @Override
    public String toString() {
        String toString = super.toString();
        return toString + "YmlPojo{" +
                "sports=" + Arrays.toString(sports) +
                ", foods=" + foods +
                ", idols=" + idols +
                ", teachers=" + Arrays.toString(teachers) +
                '}';
    }
}


public class Human {
    private String name;
    private Integer height;
    private String gender;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getHeight() {
        return height;
    }

    public void setHeight(Integer height) {
        this.height = height;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Human{" +
                "name='" + name + '\'' +
                ", height=" + height +
                ", gender='" + gender + '\'' +
                '}';
    }
}



public class Idol extends Human{
}



public class Teacher extends Human{

}

打印结果:

Arg{age=18, say='hellp', height=180}YmlPojo{sports=[basketball, football, pingpongball], foods=[noodles, hamburger], idols=[Human{name='Roger Federer', height=185, gender='male'}, Human{name='Steve Jobs', height=188, gender='male'}], teachers=[Human{name='Ms. Liu', height=165, gender='female'}, Human{name='Mr. Li', height=174, gender='male'}]}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在将 Java 项目打成 jar 包时,可以在打包命令中加入混淆 yml 文件的操作。具体步骤如下: 1. 在项目根目录下创建 `proguard.pro` 文件,用于指定混淆规则。 2. 在 `proguard.pro` 文件中添加以下规则: ``` -keep class org.yaml.snakeyaml.** { *; } ``` 这条规则用于保留 `org.yaml.snakeyaml` 包下的所有类及其成员,防止 yml 文件解析出错。 3. 在打包命令中添加以下参数: ``` -obfuscate -keepdirectories -printseeds proguard.seeds -printusage proguard.usage -printmapping proguard.mapping -injars yourJar.jar -outjars yourObfuscatedJar.jar -libraryjars path/to/your/yaml-snakeyaml.jar -dontwarn -keep class your.package.name.** { *; } ``` 这些参数的含义分别为: - `-obfuscate`:指示使用混淆器进行混淆。 - `-keepdirectories`:指示保留目录结构。 - `-printseeds`、`-printusage`、`-printmapping`:指示生成混淆映射文件和统计信息。 - `-injars`:指示输入 jar 包。 - `-outjars`:指示输出混淆后的 jar 包。 - `-libraryjars`:指示引入依赖的 jar 包,这里需要指定 `yaml-snakeyaml.jar` 的位置。 - `-dontwarn`:指示忽略警告。 - `-keep`:指示保留特定的类或方法,这里需要保留解析 yml 文件的代码所在的类及其成员。 需要注意的是,这里的 `your.package.name` 需要替换为实际的代码包名。 4. 执行打包命令,即可生成混淆后的 jar 包。 以上是一种常见的混淆 yml 文件的方式,具体操作可以根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值