一、概述
Gson是google提供的用来操作json数据的一个非常好用的类库。其使用范围非常的广泛,所以非常有必要对其进行系统的学习。
json是一种数据格式,确切的说是一种文本数据格式。其在网络通讯过程中的作用非常的明显。
目前大多数的网络通讯格式已经从xml替换为json格式。
其提供了序列化和反序列化的功能。在我们进行网络开发的过程中通常会把参数封装成json格式传给后台,后台解析后的返回结果也会封装成json格式返回给调用者。
1.如何创建一个Gson对象
private void createGsonObject() {
Gson gson = new Gson();
Gson gson1 = new GsonBuilder().create();
}
2.如何创建一个JsonObject
private void createJsonObject() {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("id", "1");
jsonObject.addProperty("bookName", "《深入Java虚拟机》");
jsonObject.addProperty("bookPrice", 36.8);
jsonObject.addProperty("bookColor", "红色");
System.out.println(jsonObject.toString());
JsonObject jsonObject1 = new JsonObject();
jsonObject1.addProperty("chapterId", "1");
jsonObject1.addProperty("chapterName", "第一章");
jsonObject.add("chapter", jsonObject1);
System.out.println(jsonObject.toString());
}
注:这里的JsonObject表示我们一样可以创建一个json对象;但是我们后面一般使用的是java对象跟json字符串的转换,可以用通过创建好的gson对象来操作。
3.数组的序列化与反序列化
private void createJsonArray() {
String[] str = new String[]{"《深入Java虚拟机》", "《Android插件编程》", "《OpenCV全解》"};
Gson gson = new Gson();
String jsonStr = gson.toJson(str);
System.out.println(jsonStr);
String[] strArray = gson.fromJson(jsonStr, String[].class);
for (String s : strArray) {
System.out.println(s);
}
}
4.List的序列化与反序列化
private void createJsonToList() {
List<Book> books = new ArrayList<>();
books.add(new Book("1", "《深入Java虚拟机》"));
books.add(new Book("2", "《OpenCV进阶》"));
books.add(new Book("3", "《深入Android源代码》"));
Gson gson = new Gson();
String jsonListStr = gson.toJson(books);
System.out.println(jsonListStr);
Type type = new TypeToken<List<Book>>() {
}.getType();
List<Book> books1 = gson.fromJson(jsonListStr, type);
for (Book book : books1) {
System.out.println(book.getName());
}
}
注:
Type type = new TypeToken<List<Book>>() {
}.getType();*
5.序列化与反序列化综合例子(基于Book对象)
public class Book {
public Book(){}
private String id;
@SerializedName(value = "bookName",alternate = {"Name","bn"})
private String name;
public Book(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
private void jsonSeriaReSeria() {
Gson gson = new Gson();
Book book = new Book("1", "《深入Java虚拟机》");
String bookStr = gson.toJson(book);
System.out.println(bookStr);
Book b = gson.fromJson(bookStr, Book.class);
System.out.println(b.getName());
}
**6.如何为属性做兼容性处理(重命名、预设名称等)**
private void reNameProperty() {
String bookJson = "{\"id\":\"1\",\"bookName\":\"《深入Java虚拟机》\"}";
Gson gson = new Gson();
Book book = gson.fromJson(bookJson, Book.class);
System.out.println(book.getName());
}
注:@SerializedName(value = “bookName”,alternate = {“Name”,“bn”})表示在反序列化时候可以使用bookName,Name,bn都可以被识别到,set到Book中的name属性;相应的在序列化的时候,name属性会被序列化为bookName字符串;
7.GsonBuilder的一些基础配置
private void gsonBuilderProperty() {
Gson gson = new GsonBuilder()
.serializeNulls()
.setPrettyPrinting()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.create();
}
8.TypeAdapter使用方法介绍
private void useTypeAdapter() {
Gson gson = new GsonBuilder().registerTypeAdapter(Book.class,new BookTypeAdapter()).create();
Book book = new Book("1","深入Java虚拟机");
System.out.println(gson.toJson(book));
String bookJson = "{\"Id\":\"1\",\"Name\":\"《深入Java虚拟机》\"}";
Book book1 = gson.fromJson(bookJson,Book.class);
System.out.println(gson.toJson(book1));
}
以下是BookTypeAdapter的代码介绍
package com.yw.gsonlib;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
public class BookTypeAdapter extends TypeAdapter<Book> {
@Override
public void write(JsonWriter jsonWriter, Book book) throws IOException {
jsonWriter.beginObject();
jsonWriter.name("Id").value(book.getId());
jsonWriter.name("Name").value(book.getName());
jsonWriter.endObject();
}
@Override
public Book read(JsonReader jsonReader) throws IOException {
Book book = new Book();
jsonReader.beginObject();
while (jsonReader.hasNext()) {
switch (jsonReader.nextName()) {
case "id":
case "Id":
book.setId(jsonReader.nextString());
break;
case "name":
case "Name":
book.setName(jsonReader.nextString());
break;
}
}
jsonReader.endObject();
return book;
}
}
转载来源:https://www.cnblogs.com/tony-yang-flutter/p/12350156.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)