JSON解析器
- 常见的JSON解析器 Jsonlib, fastjon, jackson
一、概述
1. JSON对象转为JAVA对象
- 使用jackson将JSON对象转换成JAVA对象
- 导入jackson相关jar包
- 创建jackson核心对象ObjectMapper
- 调用ObjectMapper对象的相关方法进行转换
2. JAVA对象转为JSON对象
- 使用jackson将JAVA对象转换成JSON对象
- 导入jackson相关jar包
- 创建jackson核心对象ObjectMapper
- 调用ObjectMapper对象的相关方法进行转换
2.1 转换方法
- WriterValue(参数, Object)方法
参数有三种数据类型:- File
- Writer
- OutputStream
- writeValueAsString(Object)方法
2.2 注解
- @JsonIgnore:将其写成某个属性前面,则在转换成JSON格式时忽略该属性。
- @JsonFormat(pattern = “yyyy-MM-dd”) 格式化该属性,例如Date对象的格式化(pattern = “yyyy-MM-dd”)。
二、案例
需求
- 将一个Java对象Person转换成JSON格式,Person的属性包括:姓名,年龄,性别,和生日(要求格式为"yyyy-MM-dd")。
- 将一个包含Person对象的List集合转换成JSON格式。
- 将一个包含Person对象的map集合转换成JSON格式。
- 将一个JSON格式的字符串数据转换成Person对象。
- 从文件中读取JSON格式字符串,并转换成Person对象。
实现
- 定义一个person类,并且生成getter and setter方法和toString方法。
package glut.zongmin.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.Date;
public class Person {
private String name;
private int age;
private String gender;
//@JsonIgnore//忽略该属性
@JsonFormat(pattern = "yyyy-MM-dd") //格式化日期
private Date birth;
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
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;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", birth=" + birth +
'}';
}
}
- 为了方便,我们定义一个测试类, 然后在其中添加方法来完成需求。
package glut.zongmin.test;
import com.fasterxml.jackson.core.FormatSchema;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import glut.zongmin.domain.Person;
import org.junit.Test;
public class JacksonTest {
}
2.1 方法1(对应需求):