当前位置: 代码迷 >> 综合 >> GSON-使用指南(一)
  详细解决方案

GSON-使用指南(一)

热度:52   发布时间:2024-02-09 10:30:51.0

JSON 是一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读和编写,调式也更加方便。其重要性不言而喻。解析和生成的方式很多,Java中最常用的类库有:JSON-Java、Gson、Jackson、FastJson等,本次介绍的是Gson。

GSON-基本类型的转换

import com.google.gson.Gson;/*** @author ASUS 2020/8/10 22:19*/
public class GsonTest {public static void jblx(){Gson gson = new Gson();int i = gson.fromJson("100", int.class);//100System.out.println(i);double d = gson.fromJson("99.99", double.class);//99.99System.out.println(d);boolean b = gson.fromJson("true", boolean.class);//trueSystem.out.println(b);String str = gson.fromJson("String", String.class);//StringSystem.out.println(str);double d2 = gson.fromJson("\"99.99\"", double.class);//99.99System.out.println(d2);}public static void main(String[] args) {
//        jblx();//基本数据类型的转换//====toJson()会转换成一个json字符串,而不是普通字符串
//        Gson gson = new Gson();
//        String jsonNumber = gson.toJson(100);       // "100"
//        String jsonBoolean = gson.toJson(false);    // "false"
//        String jsonString = gson.toJson("String"); //"String"
//        System.out.println(jsonNumber);
//        System.out.println(jsonBoolean);
//        System.out.println("String".equals("String"));
//        System.out.println(jsonString.equals("String"));}
}

GSON解析可能出现的问题-泛型擦除(只剩原始类型)

public class GsonTTest {public static void main(String[] args) {Gson gson = new Gson();String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";//json数组String[] strings = gson.fromJson(jsonArray, String[].class);//直接用List<String>.class?List<User>.class?它们的原始类型都是List.class(泛型擦除)List<String> stringList = gson.fromJson(jsonArray, new TypeToken<List<String>>(){}.getType());//避免泛型擦除问题}
}

Gson-TypeToken提供对泛型的支持(解决泛型擦除)

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;/*** @author ASUS* @date 2020/8/10 22:35* @service []* @description 功能描述 POJO类的生成与解析* @param**/
public class User {public String name;public int age;
//    @SerializedName("email_address")@SerializedName(value = "emailAddress",alternate = {"email","email_address"})public String emailAddress;public User() {}public User(String emailAddress) {this.emailAddress = emailAddress;}public User(String name, int age) {this.name=name;this.age=age;}public static void main(String[] args) {//生成json <==== T
//        Gson gson = new Gson();
//        User user = new User("loser",22);
//        String jsonObject = gson.toJson(user); // {"name":"怪盗kidou","age":24}
//        System.out.println("[生成json]====>>>>>>>>>>>>>>>>"+jsonObject);//解析json ===> T
//        Gson gson = new Gson();
//        String jsonString = "{\"name\":\"loser-kgc\",\"age\":22}";
//        User user = gson.fromJson(jsonString, User.class);
//        System.out.println("[解析json字符串为T]====>>>>>>>>"+user);
//        System.out.println("[解析json字符串为T]====>>>>>>>>"+user.name+","+user.age);Gson gson = new Gson();String jsonString = "{\"email_address\":\"123@qq.com\"}";User user = gson.fromJson(jsonString, User.class);System.out.println(user.emailAddress);//需开启注解String jsonString2 = "{\"email\":\"123@qq.com\"}";User user2 = gson.fromJson(jsonString2, User.class);System.out.println(user2.emailAddress);//需开启注解}
}
/*** @author ASUS 2020/8/10 23:21*/
public class UserResult {public int code;public String message;public User data;
}
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;import java.lang.reflect.Type;
import java.util.List;/*** @author ASUS 2020/8/10 23:21*/
public class UserListResult {public int code;public String message;public List<User> data;public static void main(String[] args) {String json = "{\"code\":123,\"message\":\"hahaha\",\"data\":{\"name\":\"loser-kgc\",\"age\":22}}";Gson gson = new Gson();
//        UserResult userResult = gson.fromJson(json,UserResult.class);
//        User user = userResult.data;
////        System.out.println(user.emailAddress+","+user.name+","+user.age);
//        System.out.println("=====================2=============================");
//        json = "{\"code\":123,\"message\":\"hahaha\",\"data\":[{\"name\":\"loser-kgc\",\"age\":22},{\"name\":\"loser2-kgc2\",\"age\":11}]}";
//        UserListResult userListResult = gson.fromJson(json,UserListResult.class);
//        List<User> users = userListResult.data;
//        for (User item:users) {
//            System.out.println(item.emailAddress+","+item.name+","+item.age);
//        }
//        System.out.println("=====================3=============================");
//        Type userType = new TypeToken<Result<User>>(){}.getType();//new TypeToken(Object<T>)
//        Result<User> userResult = gson.fromJson(json,userType);//对象属性
//        User user = userResult.data;
//        System.out.println(user.emailAddress+","+user.name+","+user.age);json = "{\"code\":123,\"message\":\"hahaha\",\"data\":[{\"name\":\"loser-kgc\",\"age\":22},{\"name\":\"loser2-kgc2\",\"age\":11}]}";Type userListType = new TypeToken<Result<List<User>>>(){}.getType();//new TypeToken(Object<List<T>>)Result<List<User>> userListResult = gson.fromJson(json,userListType);//列表属性List<User> users = userListResult.data;for (User item:users){System.out.println(item.emailAddress+","+item.name+","+item.age);}}
}
/*** @author ASUS 2020/8/10 23:39*/
public class Result<T> {public int code;public String message;public T data;
}