1. 程式人生 > >FastJson簡單使用(轉載)

FastJson簡單使用(轉載)

在工作中,經常客服端需要和服務端進行通訊,目前很多專案都採用JSON的方式進行資料傳輸,簡單的引數可以通過手動拼接JSON字串,但如果請求的引數過多,採用手動拼接JSON字串,出錯率就非常大了。並且工作效率也特別低。
我在網上看了一些開源的JSON框架,比如Google提供的Gson,Jackson,FastJson等框架。

經過測試,個人覺得FastJson執行效率比較高,而且簡單易用。
FastJson不依賴於第三方包, 直接可以執行在Java JDK1.5之上,FastJson完全支援http://json.org的標準,支援各種JDK型別,包括基本型別、JavaBean、Collection、Map、Enum、泛型等
還支援迴圈引用。
FastJson專案是開源的:Fastjson程式碼託管在github.org上,專案地址是 

https://github.com/AlibabaTech/fastjson

一個JSON庫涉及的最基本功能就是序列化和反序列化。Fastjson支援java bean的直接序列化。使用com.alibaba.fastjson.JSON這個類進行序列化和反序列化。

一。簡單的序列化

  1. pubic class UserInfo implements Serializable{  
  2.  private String name;  
  3.  privateint age;  
  4.  publicvoid setName(String name){  
  5.   this.name=name;  
  6.  }  
  7.  public
     String getName(){  
  8.   return name;  
  9.  }  
  10.  publicvoid setAge(int age){  
  11.   this.age=age;  
  12.  }  
  13.  publicint getAge(){  
  14.   return age;  
  15.  }  
  16. }   
  17. publicclass TestOne{  
  18.  publicstaticvoid main(String[] args){  
  19.   UserInfo info=new UserInfo();  
  20.   info.setName("zhangsan");  
  21.   info.setAge(24);  
  22.   //將物件轉換為JSON字串
  23.   String str_json=JSON.toJSONString(info);  
  24.   System.out.println("JSON="+str_json);  
  25.  }  
  26. }  

二.複雜的資料型別

  1. publicstaticvoid test2() {  
  2.   HashMap<String, Object> map = new HashMap<String, Object>();  
  3.   map.put("username""zhangsan");  
  4.   map.put("age"24);  
  5.   map.put("sex""男");  
  6.   //map集合
  7.   HashMap<String, Object> temp = new HashMap<String, Object>();  
  8.   temp.put("name""xiaohong");  
  9.   temp.put("age""23");  
  10.   map.put("girlInfo", temp);  
  11.   //list集合
  12.   List<String> list = new ArrayList<String>();  
  13.   list.add("爬山");  
  14.   list.add("騎車");  
  15.   list.add("旅遊");  
  16.   map.put("hobby", list);  
  17.   /*JSON序列化,預設序列化出的JSON字串中鍵值對是使用雙引號,如果需要單引號的JSON字串,[eg:String jsonString = JSON.toJSONString(map,   SerializerFeature.UseSingleQuotes);] 
  18.    *fastjson序列化時可以選擇的SerializerFeature有十幾個屬性,你可以按照自己的需要去選擇使用。  
  19.    */
  20.   String jsonString = JSON.toJSONString(map);  
  21.   System.out.println("JSON=" + jsonString);  
  22. }  

三.反序列化

  1. publicvoid test3(){  
  2.  String json="{\"name\":\"chenggang\",\"age\":24}";  
  3.  //反序列化
  4.  UserInfo userInfo=JSON.parseObject(json,UserInfo.class);  
  5.  System.out.println("name:"+userInfo.getName()+", age:"+userInfo.getAge());  
  6. }  
  7. /**泛型的反序列化*/
  8. publicstaticvoid test4(){  
  9.   String json="{\"user\":{\"name\":\"zhangsan\",\"age\":25}}";  
  10.   Map<String, UserInfoBean> map = JSON.parseObject(json, new TypeReference<Map<String, UserInfoBean>>(){});  
  11.   System.out.println(map.get("user"));  
  12.  }  

//同理, json字串中可以巢狀各種資料型別。

四.日期格式化

  1. publicvoid test5(){  
  2.   Date date=new Date();    
  3.   //輸出毫秒值
  4.   System.out.println(JSON.toJSONString(date));  
  5.   //預設格式為yyyy-MM-dd HH:mm:ss  
  6.   System.out.println(JSON.toJSONString(date, SerializerFeature.WriteDateUseDateFormat));  
  7.   //根據自定義格式輸出日期 
  8.   System.out.println(JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd", SerializerFeature.WriteDateUseDateFormat));  
  9. }  



這裡舉了幾個簡單的例子, 其它特殊要求可以根據FastJson的方法的說明,進行選擇。