1. Data Binding API用于使用属性访问器或使用注解将JSON转换为POJO(Plain Old Java Object)和从POJO(Plain Old Java Object)转换JSON。
2. 数据绑定有两种类型
2.1. 基本数据绑定: 将JSON转换与Java映射, 集合, 字符串, 数字, 布尔值, 数组和NULL对象之间相互转换。
2.2. 对象数据绑定: 将JSON转换与任何JAVA类型之间相互转换。
3. 基本数据绑定
3.1. 基本数据绑定是指将JSON映射到JAVA核心数据类型和内置集合。Gson提供了各种内置适配器, 可用于序列化/反序列化原始数据类型。
3.2. 新建一个名为GsonDataBinding的Java项目, 同时添加相关jar包。
3.3. 新建BaseDataBinding.java
package com.fj.dbb;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class BaseDataBinding {
public static void main(String args[]) {
Integer id = 1111;
String name = "张三";
boolean isMale = false;
Integer[] sanWei = {100,90,85};
Collection<String> familyMembers = new ArrayList<String>();
familyMembers.add("爸爸");
familyMembers.add("妈妈");
familyMembers.add("妹妹");
Map<String, String> scores = new HashMap<String, String>();
scores.put("chinese", "90");
scores.put("math", "100");
scores.put("english", "90");
Gson gson = new Gson();
Type collectionType = new TypeToken<Collection<String>>(){}.getType();
Type mapType = new TypeToken<Map<String, String>>(){}.getType();
// 序列化
System.out.print("{");
// String toJson(Object src)将指定的对象序列化为JSON字符串。
System.out.print("id:" + gson.toJson(id) + ", ");
System.out.print("name:" + gson.toJson(name) + ", ");
System.out.print("isMale:" + gson.toJson(isMale) + ", ");
System.out.print("sanWei:" + gson.toJson(sanWei) + ", ");
System.out.print("familyMembers:" + gson.toJson(familyMembers, collectionType) + ", ");
// String toJson(Object src, Type typeOfSrc)将指定的对象按指定类型的适配器将其序列化为JSON字符串。
System.out.print("scores:" + gson.toJson(scores, mapType));
System.out.println("}");
// 反序列化
// T fromJson(String json, Class<T> classOfT)将指定的json字符串反序列化为指定类的对象。
id = gson.fromJson("2222", Integer.class);
name = gson.fromJson("\"小刚\"", String.class);
isMale = gson.fromJson("true", Boolean.class);
sanWei = gson.fromJson("[60,130,185]", Integer[].class);
// T fromJson(String json, Type typeOfT)将指定的json字符串按指定类型的适配器将其反序列化为对象。
familyMembers = gson.fromJson("[\"爸爸\",\"妈妈\",\"哥哥\"]", collectionType);
scores = gson.fromJson("{\"chinese\":\"100\",\"english\":\"100\",\"math\":\"100\"}", mapType);
System.out.println("id: " + id);
System.out.println("name: " + name);
System.out.println("isMale: " + isMale);
System.out.println("sanWei: " + Arrays.toString(sanWei));
System.out.println("familyMembers: " + familyMembers);
System.out.println("scores: " + scores);
}
}
3.4. 运行BaseDataBinding.java
4. 对象数据绑定
4.1. 对象数据绑定是指将JSON映射到任何JAVA对象。
4.2. 新建Student.java
package com.fj.dbo;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Boolean isMale;
private Integer[] sanWei;
private Collection<String> familyMembers;
private Map<String, String> scores;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean isMale() {
return isMale;
}
public void setMale(Boolean isMale) {
this.isMale = isMale;
}
public Integer[] getSanWei() {
return sanWei;
}
public void setSanWei(Integer[] sanWei) {
this.sanWei = sanWei;
}
public Collection<String> getFamilyMembers() {
return familyMembers;
}
public void setFamilyMembers(Collection<String> familyMembers) {
this.familyMembers = familyMembers;
}
public Map<String, String> getScores() {
return scores;
}
public void setScores(Map<String, String> scores) {
this.scores = scores;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", isMale=" + isMale + ", sanWei=" + Arrays.toString(sanWei)
+ ", familyMembers=" + familyMembers + ", scores=" + scores + "]";
}
}
4.3. 新建ObjectDataBinding.java
package com.fj.dbo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class ObjectDataBinding {
public static void main(String[] args) {
// 创建一个学生对象
Student student = new Student();
student.setId(1111);
student.setName("张三");
student.setMale(false);
Integer[] sanWei = {100,90,85};
student.setSanWei(sanWei);
Collection<String> familyMembers = new ArrayList<String>();
familyMembers.add("爸爸");
familyMembers.add("妈妈");
familyMembers.add("妹妹");
student.setFamilyMembers(familyMembers);
Map<String, String> scores = new HashMap<String, String>();
scores.put("chinese", "90");
scores.put("math", "100");
scores.put("english", "90");
student.setScores(scores);
// 1. Gson构造器
GsonBuilder builder = new GsonBuilder();
// 2. 格式良好的输出
builder.setPrettyPrinting();
// 3. 创建Gson对象
Gson gson = builder.create();
// 4. JavaBean转化为JSON字符串
String jsonString = gson.toJson(student);
System.out.println(jsonString);
// 5. JSON字符串转化为JavaBean
student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
}
}
4.4. 运行ObjectDataBinding.java