一、Fastjson序列化方式
Fastjson是一種高效的JSON解析器、操作器,它可以將Java對象序列化為JSON字符串,並將JSON字符串反序列化為Java對象。通常情況下,Fastjson序列化的方式有三種:
1、使用JSON.toJSONString()方法將Java對象序列化為JSON字符串。
2、使用JSONObject.toJSONString()方法將Java對象序列化為JSON字符串。
3、使用JSON.parseObject()方法將JSON字符串反序列化為Java對象。
其中,JSON.toJSONString()方法和JSONObject.toJSONString()方法的區別在於,JSON.toJSONString()方法序列化後的JSON字符串不帶“{}”,而JSONObject.toJSONString()方法序列化後的JSON字符串默認帶上“{}”。
// JSON.toJSONString()方法示例
User user = new User("John", 18);
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr);
// JSONObject.toJSONString()方法示例
JSONObject jsonObj = (JSONObject) JSON.toJSON(user);
String jsonStr = jsonObj.toJSONString();
System.out.println(jsonStr);
// JSON.parseObject()方法示例
String jsonStr = "{\"name\":\"John\",\"age\":18}";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println(user.getName());
二、Fastjson反序列化泛型
當需要將JSON字符串反序列化為泛型對象時,Fastjson提供了以下兩種方式:
1、使用TypeReference類實現泛型反序列化。
2、使用JSONArray.parseObject()方法實現泛型反序列化。
// TypeReference類示例
String jsonStr = "[{\"name\":\"John\",\"age\":18},{\"name\":\"Mike\",\"age\":20}]";
List userList = JSON.parseObject(jsonStr, new TypeReference<List>(){});
System.out.println(userList.get(0).getName());
// JSONArray.parseObject()方法示例
String jsonStr = "[{\"name\":\"John\",\"age\":18},{\"name\":\"Mike\",\"age\":20}]";
Type type = new TypeReference<List>(){}.getType();
List userList = JSONArray.parseObject(jsonStr, type);
System.out.println(userList.get(0).getName());
三、Fastjson序列化對象
當需要將Java對象序列化為JSON字符串時,Fastjson支持對對象的各種操作,包括屬性名的修改、屬性值的過濾、屬性值的格式化等。以下是一些常用的示例:
1、修改對象屬性名
User user = new User("John", 18);
String jsonStr = JSON.toJSONString(user, SerializerFeature.BeanToArray);
System.out.println(jsonStr); // ["John",18]
2、忽略對象屬性
User user = new User("John", 18);
String jsonStr = JSON.toJSONString(user, SerializerFeature.IgnoreNonFieldGetter);
System.out.println(jsonStr); // {"age":18,"name":"John"}
3、設置對象屬性值為null
User user = new User("John", 18);
user.setName(null);
String jsonStr = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println(jsonStr); // {"age":18,"name":null}
四、Fastjson序列化出額外字段
當需要將Java對象序列化為JSON字符串時,Fastjson支持在序列化時添加額外的字段。以下是一個示例:
User user = new User("John", 18);
JSONObject jsonObj = (JSONObject) JSON.toJSON(user);
jsonObj.put("gender", "male");
String jsonStr = jsonObj.toJSONString();
System.out.println(jsonStr); // {"age":18,"gender":"male","name":"John"}
五、Fastjson序列化別名
當需要將Java對象序列化為JSON字符串時,Fastjson支持修改屬性名為別名。以下是一個示例:
public class User {
@JSONField(name = "userName")
private String name;
private int age;
public 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;
}
}
User user = new User("John", 18);
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr); // {"age":18,"userName":"John"}
六、Fastjson序列化主鍵成了數組
當需要將Java對象序列化為JSON字符串時,Fastjson支持將主鍵序列化成數組。以下是一個示例:
public class User {
private String[] id;
private String name;
public User(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;
}
}
User user = new User(new String[]{"001", "002"}, "John");
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr); // {"id":["001","002"],"name":"John"}
七、Fastjson序列化基本類型
當需要將基本類型序列化為JSON字符串時,Fastjson支持自動轉換。以下是一個示例:
int num = 123; String jsonStr = JSON.toJSONString(num); System.out.println(jsonStr); // 123
八、Fastjson序列化對象數組
當需要將對象數組序列化為JSON字符串時,Fastjson可以通過List集合實現。以下是一個示例:
public class User {
private String name;
private int age;
public 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;
}
}
List userList = new ArrayList();
userList.add(new User("John", 18));
userList.add(new User("Mike", 20));
String jsonStr = JSON.toJSONString(userList);
System.out.println(jsonStr); // [{"age":18,"name":"John"},{"age":20,"name":"Mike"}]
九、Fastjson序列化某個字段不同類型
當需要將Java對象序列化為JSON字符串時,如果某個字段需要序列化為不同的類型,Fastjson提供了以下方法解決:
1、將字段序列化為字符串。
2、使用SerializeFilter類實現字段序列化。
public class User {
private String name;
@JSONField(serializeUsing = AgeSerializer.class)
private int age;
public 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;
}
}
public class AgeSerializer implements ObjectSerializer {
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
Integer value = (Integer) object;
if (value >= 18) {
serializer.write(Adult.ADU);
} else {
serializer.write(Child.CHI);
}
}
public enum Adult {ADU; }
public enum Child {CHI; }
}
User user = new User("John", 18);
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr); // {"age":{"name":"ADU"},"name":"John"}
以上就是Fastjson序列化的全解析,通過以上示例,我們可以更好地理解Fastjson的序列化方式和操作方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/244597.html
微信掃一掃
支付寶掃一掃