最近使用Gson来处理了json串,使用了一些常用的方法,为加深印象,因此记录下来
package JsonObjectDemo;
import com.google.gson.*;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;
public class JsonObjectDemo {
public static void main(String[] args) {
List<User> userList = new ArrayList<User>();
User user = new User("张三", 18);
User user1 = new User("李四", 20);
userList.add(user);
userList.add(user1);
Gson gson = new Gson();
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("name","张三");
jsonObject.addProperty("age",18);
//JavaBean 转 String
String userString = gson.toJson(user, User.class);
//或者使用Type来获取类型 String s1 = gson.toJson(user, new TypeToken<User>(){}.getType());
//{"name":"张三","age":18}
//System.out.println(userString);
//JavaBean 转 JsonObject
JsonObject asJsonObject = gson.toJsonTree(user).getAsJsonObject();
//{"name":"张三","age":18}
//System.out.println(asJsonObject);
//String 转 JavaBean
String javaBeanString = "{\"name\":\"张三\",\"age\":18}";
User user3 = gson.fromJson(javaBeanString, User.class);
//User{name='张三', age=18}
//System.out.println(user3);
//String 转 JsonObject
JsonObject jsonObject1 = new JsonParser().parse(javaBeanString).getAsJsonObject();
//{"name":"张三","age":18}
//System.out.println(jsonObject1);
//JsonObject 转 JavaBean
User user2 = gson.fromJson(jsonObject, User.class);
//User{name='张三', age=18}
//System.out.println(user2.toString());
//JsonObject 转 String
//{"name":"张三","age":18}
System.out.println(jsonObject1.toString());
//List 转 String
String listString = gson.toJson(userList);
// [{"name":"张三","age":18},{"name":"李四","age":20}]
//System.out.println(listString);
//List 转 JsonArray
JsonArray jsonArray = gson.toJsonTree(userList, new TypeToken<List<User>>() {
}.getType()).getAsJsonArray();
//[{"name":"张三","age":18},{"name":"李四","age":20}]
//System.out.println(jsonElement);
//String 转 JsonArray
JsonArray jsonArray1 = new JsonParser().parse(listString).getAsJsonArray();
//[{"name":"张三","age":18},{"name":"李四","age":20}]
//System.out.println(jsonArray1);
//String 转 list
List<User> listUser = gson.fromJson(listString, new TypeToken<List<User>>() {
}.getType());
//[User{name='张三', age=18}, User{name='李四', age=20}]
//System.out.println(listUser.toString());
//JsonArray 转 String
//[{"name":"张三","age":18},{"name":"李四","age":20}]
System.out.println(jsonArray.toString());
//JsonArray 转 List
List<User> listUser1 = gson.fromJson(jsonArray, new TypeToken<List<User>>() {
}.getType());
//[User{name='张三', age=18}, User{name='李四', age=20}]
//System.out.println(listUser1);
}
}
class User {
private String name;
private int age;
User() {
}
User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
1 JsonElement 中 添加 null 只能使用 add 方法
2 null值的类型是 JsonNull 因此判null的时候应该使用 isJsonNull()
3 如果json中包含null值,使用gson转出来的对象都不包含含有null值的 key-value对,这时候需要使用另一个gson对象来做处理
4 Gson gsonContainsNull = new GsonBuilder().serializeNulls().create();
5 如果想对 value 值做处理的封装,比如说将 value 中的 null 值转为其他字符,则可以使用 gson中的TypeAdapter来做相应的处理。