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;
}