淘先锋技术网

首页 1 2 3 4 5 6 7

前言

本篇为JAVA自动化的第二篇章,主要为YAML的序列化与反序列化
主要讲述后续自动化中能够使用得部分,如果想了解更多可以查看官方文档
学习条件:JAVA基础部分

YAML介绍

  • YAML是”YAML Ain’t markup language"(YAML不是一种标记语言)的缩写,是一种对人类设计友好(方便读写)的数据序列化语言,可以很好地与其它编程语言协同完成日常任务。
  • YAML 是一种比JSON更直观的表现形式数据序列化的语言,特别适合用来表达或编辑数据结构、各种配置文件,既可以以.yaml结尾,也可以.yml结尾。
  • 它是JSON的一个严格超集,在语法上增加了类似Python的换行和缩进。不过,与Python不同,YAML不允许使用Tab缩进。

YAML语法规则

1.YAML文件开始行是—,这是YAML格式的一部分,表示YAML文件的开始
2.使用缩进表示层级关系,但是不允许使用tab,只能使用空格
3.缩进的空格数不重要,只要相同层级的元素左对齐即可
4.大小写是敏感的,#表示为注释,这个字符一直到尾行,会被忽略

YAML值类型:

  • 字符串(默认不用加引号,包含空格或者特殊字符必须加引号,单引双引都可以)
  • 布尔值(true或false)
  • 数字(整数或浮点数)
  • -null(null或~)
  • 对象
单行语法
多行语法(一般多为多行语法,较为清晰)
address:
  name: Kai
  age: 25
  • 数组
单行语法
多行语法(一般多为多行语法,较为清晰)
subject:
  - 吃饭
  - 睡觉
  - 打豆豆

举例:


name: Kai
age: 25
height: 180
isSingle: false
address:
  province: 上海市
  city: 徐汇区
hobby:
  - 吃饭
  - 睡觉
  - 打豆豆
weight: null

Jackson处理YAML

Jackson是一个功能强大得Java序列化库,除了YAML之外,还支持JSON,CSV,XML

Maven相关配置:https://mvnrepository.com 在此网站找到相关版本,或者直接复制下方

<!-- 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.13.3</version>
</dependency>

相关使用

ObjectMapper是序列化/反序列化操作的核心,Jackson的所有操作都是在ObjectMapper中实现

序列化:JAVA对象 --> YAML

不管你是什么结构的对象,想转yaml,直接 objectMapper.writeValueAsString() 搞定。

对象转YAML
//先准备一个学生类
package yaml;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

//将对象转为YAML
package yaml;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

public class YamlDemo1 {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
        Student student = new Student("Kai", 25);
        String yaml = objectMapper.writeValueAsString(student);
        System.out.println(yaml);
    }
}
Map转YAML
package yaml;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

import java.util.HashMap;

public class YamlDemo2 {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
        HashMap<String, Object> map = new HashMap<>();
        map.put("test",1);
        map.put("age",18);
        String yaml = objectMapper.writeValueAsString(map);
        System.out.println(yaml);
    }
}

反序列化:YAML–> JAVA对象

YAML转对象
package yaml;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

public class YamlDemo3 {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
        String yaml= "{\"name\":\"Kai\",\"age\":\"25\"}";
        Student student = objectMapper.readValue(yaml, Student.class);
        //这里还支持传入yaml文件,可以将参数中的yaml切换为 new File("需要绑定的文件路径")
        System.out.println(student);

    }
}
YAML转Map
package yaml;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

import java.util.HashMap;

public class YamlDemo4 {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
        String yaml= "{\"name\":\"Kai\",\"age\":\"25\"}";
        HashMap hashMap = objectMapper.readValue(yaml, HashMap.class);
        System.out.println(hashMap);
    }
}

结尾

本篇简单介绍了YAML和Jackson的简单用法,主要为后续JAVA自动化中做准备,如需关于Jackson的详细内容可查看官网