一、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}]"; ListuserList = JSON.parseObject(jsonStr, new TypeReference
>(){}); System.out.println(userList.get(0).getName()); // JSONArray.parseObject()方法示例 String jsonStr = "[{\"name\":\"John\",\"age\":18},{\"name\":\"Mike\",\"age\":20}]"; Type type = new TypeReference
>(){}.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; } } ListuserList = 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的序列化方式和操作方法。