--> 首先導入jar包,並添加到Build Path
--> 需要User類:有屬性、構造方法和setter、getter方法。
--> Test 測試類:
package com.dragon.java.gson;
import java.util.Arrays;
import java.util.List;
import com.dragon.java.json.User;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
/*
Gson: Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。
--> 可以將一個 JSON 字符串轉成一個 Java 對象,或者反過來。
*/
public class Test {
public static void main(String[] args) {
String json = "{\"name\": \"李四\", \"age\": 30}";
String jsons = "[{\"name\": \"李四\", \"age\": 40},{\"name\": \"張三\", \"age\": 20},{\"name\": \"王五\", \"age\": 30}]";
String jsonss = "{\"status\":\"ok\", \"data\": [{\"name\": \"李四\", \"age\": 30},{\"name\": \"張三\", \"age\": 20},{\"name\": \"王五\", \"age\": 30}] }";
gsonFirst(json);
System.out.println("----------------");
gsonTypeToken(jsons);
System.out.println("----------------");
gsonFinal(jsonss);
System.out.println("----------------");
serializtion();
System.out.println("----------------");
}
/**
* 序列化
*/
private static void serializtion() {
// User user = new User("張三", 20);
Gson gson = new Gson();
// String jsonString = gson.toJson(user);
User[] users = { new User("張三", 20), new User("李四", 30),
new User("王五", 40) };
// 把數組或可變參數轉換成集合。這個集合是不可變的集合,不能添加或排除元素
List<User> userList = Arrays.asList(users);
// 可以將集合變為可操作的集合 // new ArrayList<>().addAll(userlist);
String json = gson.toJson(users);
System.out.println(json);
String json2 = gson.toJson(userList);
System.out.println(json2);
}
/**
* Gson解析
*
* @param jsonss
*/
private static void gsonFinal(String jsonss) {
// 截取有用的字符串。也可以結合官方解析截取
//String newJson = jsonss.substring(jsonss.indexOf("["),jsonss.lastIndexOf("]") + 1);
Gson gson = new Gson();
A a = gson.fromJson(jsonss, A.class);
if (a.getStatus().equals("ok")) {
System.out.println(a.getStatus());
List<User> data = a.getData();
for (User user : data) {
System.out.println(user);
}
}
}
/**
* TypeToken<>(){}
*
* @param jsons
*/
private static void gsonTypeToken(String jsons) {
Gson gson = new Gson();
// List users = gson.fromJson(jsons, List.class); // 泛型擦除:寫的任何的泛型類,變成.class之後泛型都會丟失
TypeToken<List<User>> listType = new TypeToken<List<User>>() {
}; // TypeToken<>(){} --> (protected)抽象類 --> 記住泛型的類型 --> new了TypeToken的匿名內部類
List<User> users = gson.fromJson(jsons, listType.getType());
for (User user : users) {
System.out.println(user);
}
}
/**
* 解析Json字符串
* 反序列化
*
* @param json
*/
private static void gsonFirst(String json) {
// 1、創建一個Gson對象
Gson gson = new Gson();
// 2、解析字符串
// --> 必須有無參的構造函數
// --> 每個屬性必須提供setter、getter方法
User user = gson.fromJson(json, User.class);
System.out.println(user);
}
}