FastJson实现复杂对象序列化与反序列化

一.认识FastJson

1.优势

fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果说明比gson快大约6倍,fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库。 FastJson速度最快,fastjson具有极快的性能,超越任其他的Java Json parser。
2.用途

FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,Fastjson是一个Java语言编写的高性能功能完善的JSON库。

Fastjson支持java bean的直接序列化。 可以使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化。

3.jar包下载地址

fastJson jar

二.FastJsonAPI介绍

FastJson功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省;无依赖。
Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

1.常用函数

  1. //将JavaBean序列化为JSON文本(常用)  
  2. public static final String toJSONString(Object object);  
  3.   
  4. //把JSON文本parse为JavaBean(常用)  
  5. public static final T parseObject(String text, Class clazz);  
//将JavaBean序列化为JSON文本(常用)
public static final String toJSONString(Object object);

//把JSON文本parse为JavaBean(常用)
public static final T parseObject(String text, Class clazz);

2.其他函数

  1. // 把JSON文本parse成JSONObject  
  2. public static final JSONObject parseObject(String text);  
  3.   
  4. // 把JSON文本parse成JSONArray  
  5.  public static final JSONArray parseArray(String text);  
  6.   
  7. //把JSON文本parse成JavaBean集合  
  8. public static final List parseArray(String text, Class clazz);  
  9.   
  10. // 将JavaBean序列化为带格式的JSON文本  
  11. public static final String toJSONString(Object object, boolean prettyFormat);  
  12.    
  13.   
  14. // 把JSON文本parse为JSONObject或者JSONArray  
  15. public static final Objectparse(String text);  
  16.   
  17.   
  18. //将JavaBean转换为JSONObject或者JSONArray。  
  19. public static final Object toJSON(Object javaObject);  
// 把JSON文本parse成JSONObject
public static final JSONObject parseObject(String text);

// 把JSON文本parse成JSONArray
 public static final JSONArray parseArray(String text);

//把JSON文本parse成JavaBean集合
public static final List parseArray(String text, Class clazz);

// 将JavaBean序列化为带格式的JSON文本
public static final String toJSONString(Object object, boolean prettyFormat);
 

// 把JSON文本parse为JSONObject或者JSONArray
public static final Objectparse(String text);


//将JavaBean转换为JSONObject或者JSONArray。
public static final Object toJSON(Object javaObject);

三.实战

1. 创建复杂对象

  1. package test;  
  2. import java.io.Serializable;  
  3. import java.util.ArrayList;  
  4. import java.util.Map;  
  5. public class User{  
  6. public String username="";  
  7. public int id=0;  
  8. public ArrayList<Link>link=null;  
  9. public Map<String,Link> result=null;  
  10. //getter and setter省略(读者自行补充)  
  11. }  
  12. public class Link{  
  13. public String name="";  
  14. public String phone="";  
  15. //getter and setter省略(读者自行补充)   
  16. }   
package test;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Map;
public class User{
public String username="";
public int id=0;
public ArrayList<Link>link=null;
public Map<String,Link> result=null;
//getter and setter省略(读者自行补充)
}
public class Link{
public String name="";
public String phone="";
//getter and setter省略(读者自行补充) 
} 

 2.主程序 
 

  1. package test;  
  2. import java.util.ArrayList;  
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5. import com.alibaba.fastjson.JSON;  
  6. import com.alibaba.fastjson.JSONObject;  
  7. import com.alibaba.fastjson.JSONArray;  
  8. import com.alibaba.fastjson.JSONException;   
  9. public class FastJsonTest {  
  10.  //填充user对象   
  11.  public static void setUser(User user){  
  12.         user.setId(1);  
  13.         user.setUsername("xiaoxiang");  
  14.         Link lk=new Link();  
  15.         lk.setName("rongrong");  
  16.         lk.setPhone("1234234");  
  17.         Link lk1=new Link();  
  18.         lk1.setName("rongrong");  
  19.         lk1.setPhone("1234234");  
  20.         ArrayList<Link> list=new ArrayList();  
  21.         list.add(lk1);  
  22.         list.add(lk);  
  23.         user.setLink(list);  
  24.         Map map=new HashMap();  
  25.         map.put("123",lk);  
  26.         map.put("234",lk1);  
  27.         user.setResult(map);  
  28.     }  
  29. public static void main(String []args){  
  30.     User user=new User();  
  31.     setUser(user);  
  32.     //将javabean转成json  
  33.  String str=JSON.toJSONString(user);   
  34.   System.out.println("fastJson"+str);  
  35.     //将json转成java bean  
  36.    User myuser=JSON.parseObject(str,User.class);  
  37.   System.out.println(myuser.getResult().get("123").getName());  
  38. }}  
package test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException; 
public class FastJsonTest {
 //填充user对象 
 public static void setUser(User user){
    	user.setId(1);
    	user.setUsername("xiaoxiang");
    	Link lk=new Link();
    	lk.setName("rongrong");
    	lk.setPhone("1234234");
    	Link lk1=new Link();
    	lk1.setName("rongrong");
    	lk1.setPhone("1234234");
    	ArrayList<Link> list=new ArrayList();
    	list.add(lk1);
    	list.add(lk);
    	user.setLink(list);
    	Map map=new HashMap();
    	map.put("123",lk);
    	map.put("234",lk1);
    	user.setResult(map);
    }
public static void main(String []args){
    User user=new User();
    setUser(user);
    //将javabean转成json
 String str=JSON.toJSONString(user); 
  System.out.println("fastJson"+str);
    //将json转成java bean
   User myuser=JSON.parseObject(str,User.class);
  System.out.println(myuser.getResult().get("123").getName());
}}

四.总结
FastJson确实在复杂对象序列化和反序列化方面做的比较好,而且速度和效率上都比java原生序列化机制要好。
但FastJson使用大对象或者大文件时,效果没有jackson好。你所以需要根据具体项目选择合适的序列化工具。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到复杂对象反序列化时,Fastjson同样提供了相应的方法来处理复杂对象通常包含嵌套的对象、集合或数组。下面是一个示例代码,演示了如何使用Fastjson进行复杂对象反序列化: ```java import com.alibaba.fastjson.JSON; public class FastjsonDemo { public static void main(String[] args) { String jsonStr = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\",\"pets\":[{\"name\":\"Tom\",\"age\":2},{\"name\":\"Jerry\",\"age\":1}]}"; // 反序列化 Person person = JSON.parseObject(jsonStr, Person.class); System.out.println(person.getName()); // 输出:John System.out.println(person.getAge()); // 输出:30 System.out.println(person.getCity()); // 输出:New York for (Pet pet : person.getPets()) { System.out.println(pet.getName()); // 输出:Tom,Jerry System.out.println(pet.getAge()); // 输出:2,1 } } } class Person { private String name; private int age; private String city; private List<Pet> pets; // 省略构造器、getter和setter方法 } class Pet { private String name; private int age; // 省略构造器、getter和setter方法 } ``` 在上面的示例中,我们将一个包含嵌套对象JSON字符串反序列化为一个Person对象。Person类中包含了一个List类型的pets字段,pets字段是一个包含了多个Pet对象的集合。通过调用`JSON.parseObject()`方法,Fastjson会自动将JSON字符串中的嵌套对象转换为相应的Java对象。 需要注意的是,Fastjson处理嵌套对象时需要保证嵌套对象的类结构与JSON字符串的结构相匹配,即字段名和类型要一致。否则,可以使用`@JSONField`注解来进行映射或者使用`TypeReference`类来处理复杂泛型类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值