1. 程式人生 > >FastJSON 簡單使用

FastJSON 簡單使用

定義 自己 xml文件 {} quotes single size 實現 反序列化

FastJSON是一個Java語言編寫的高性能,功能完善,完全支持http://json.org的標準的JSON庫。多了不說了,百度一下一大把。

在此,簡單的總結一下自己用過,測試過的方法。

如果使用Maven,在pom.xml文件加入以下依賴。

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.2.15</version>
 </dependency>

  

序列化

序列化就是指 把JavaBean對象轉成JSON格式的字符串。

com.alibaba.fastjson.JSON提供了許多方法(多態)實現序列化。

技術分享圖片

1.基本的序列化

String objJson = JSON.toJSONString(Object object);

  

傳入一個對象,將對象轉成JSON字符串。

例1:將Map轉成JSON

 Map<String, Object> map = new HashMap<String, Object>();
 map.put("key1", "One");
 map.put("key2", "Two");
         
 String mapJson = JSON.toJSONString(map);

  

輸出結果:

{"key1":"One","key2":"Two"}

  

例2:將List<Map>轉成JSON。

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
         
 Map<String, Object> map1 = new HashMap<String, Object>();
 map1.put("key1", "One");
 map1.put("key2", "Two");
         
 Map<String, Object> map2 = new HashMap<String, Object>();
 map2.put("key1", "Three");
 map2.put("key2", "Four");
        
 list.add(map1);
 list.add(map2);
      
String listJson = JSON.toJSONString(list);

  

輸出結果:

[{"key1":"One","key2":"Two"},{"key3":"Three","key4":"Four"}]

  

例3:自定義JavaBean User轉成JSON。

User user = new User();
 user.setUserName("李四");
 user.setAge(24);
         
 String userJson = JSON.toJSONString(user);

  

輸出結果:

{"age":24,"userName":"李四"}

  

可以輸出格式化後的 JSON 字符串。

String objJson = JSON.toJSONString(Object object, boolean prettyFormat);

  

傳入一個對象和一個布爾類型(是否格式化),將對象轉成格式化後的JSON字符串。

例4:以例2代碼為例。

String listJson = JSON.toJSONString(list, true);

  

輸出結果為:

[
      {
          "key1":"One",
          "key2":"Two"
      },
      {
        "key3":"Three",
          "key4":"Four"
    }
 ]

  

FastJSON提供了許多特性支持。

String objJson = JSON.toJSONString(Object object, SerializerFeature... features) 

  

傳入一個對象和SerializerFeature類型的可變變量。SerializerFeature是一個枚舉。

com.alibaba.fastjson.serializer.SerializerFeature

技術分享圖片

技術分享圖片

你可以根據自己的情況使用這些特性。

簡單說下幾個常用的特性:

1.日期格式化:

FastJSON可以直接對日期類型格式化,在缺省的情況下,FastJSON會將Date轉成long。

例5:FastJSON將java.util.Date轉成long。

 String dateJson = JSON.toJSONString(new Date());
         
System.out.println(dateJson);

  

輸出結果:

1401370199040

  

例6:使用SerializerFeature特性格式化日期。

String dateJson = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);
        
 System.out.println(dateJson);

  

輸出結果:

"2014-05-29 21:36:24"

  

也可以指定輸出日期格式。

例7:指定輸出日期格式。

String dateJson = JSON.toJSONStringWithDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
         
 System.out.println(dateJson);

  

輸出結果:

"2014-05-29 21:47:00.154"

  

2.使用單引號。

例8:以例2為例。

String listJson = JSON.toJSONString(list, SerializerFeature.UseSingleQuotes);

  

輸出結果:

[{‘key1‘:‘One‘,‘key2‘:‘Two‘},{‘key3‘:‘Three‘,‘key4‘:‘Four‘}]

  

3.JSON格式化。

例9:

String listJson = JSON.toJSONString(list, SerializerFeature.PrettyFormat);

  

輸出結果:與例4結果一致。

4.輸出Null字段。

缺省情況下FastJSON不輸入為值Null的字段,可以使用SerializerFeature.WriteMapNullValue使其輸出。

例10:

Map<String, Object> map = new HashMap<String,Object>();
         
 String b = null;
 Integer i = 1;
         
 map.put("a", b);
 map.put("b", i);
         
 String listJson = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);

  

輸出結果:

{"a":null,"b":1}

  

5.序列化是寫入類型信息。

例11:

User user = new User();
         
 user.setAge(18);
 user.setUserName("李四");
         
 String listJson = JSON.toJSONString(user, SerializerFeature.WriteClassName);

  

輸出結果:

{"@type":"User","age":18,"userName":"李四"}

  



由於序列化帶了類型信息,使得反序列化時能夠自動進行類型識別。

例12:將例11反序列化。

User user1 = (User) JSON.parse(listJson);
         
 System.out.println(user1.getAge());

  

輸出結果:

18

  

如果User序列化是沒有加入類型信息(SerializerFeature.WriteClassName),按照例12的做法就會報錯(java.lang.ClassCastException)。

反序列化

反序列化就是把JSON格式的字符串轉化為Java Bean對象。

com.alibaba.fastjson.JSON提供了許多方法(多態)實現反序列化

技術分享圖片

簡單舉幾個例子。

指定Class信息反序列化。

例13:將例3反序列化。

User user1 = JSON.parseObject(userJson, User.class);
System.out.println(user1.getUserName());

  

輸出結果:

李四

  

集合反序列化。

例14:將例2反序列化。

List<Map> list1 = JSON.parseArray(listJson, Map.class);
          
 for(Map<String, Object> map : list1){
     System.out.println(map.get("key1"));
     System.out.println(map.get("key2"));         
 }

  

輸出結果:

One
 Two
 Three
 Four

  

泛型的反序列化(使用TypeReference傳入類型信息)。

例15:將例1反序列化。

 Map<String, Object> map1 = JSON.parseObject(mapJson, new TypeReference<Map<String, Object>>(){});
 System.out.println(map1.get("key1"));
 System.out.println(map1.get("key2"));

  

輸出結果:

One
Two

  

---------------------------------------------------------------------------------------------------------------------------------------------------------

JSONObject,JSONArray是JSON的兩個子類。

JSONObject相當於Map<String, Object>,

JSONArray相當於List<Object>。

簡單方法示例:

例16:將Map轉成JSONObject,然後添加元素,輸出。

Map<String, Object> map = new HashMap<String, Object>();
  map.put("key1", "One");
  map.put("key2", "Two");
                             
  JSONObject j = new JSONObject(map);
                     
  j.put("key3", "Three");
            
  System.out.println(j.get("key1"));
 System.out.println(j.get("key2"));
 System.out.println(j.get("key3"));

  

輸出結果:

One
 Two
 Three

  

例17:將List對象轉成JSONArray,然後輸出。

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
          
  Map<String, Object> map = new HashMap<String, Object>();
  map.put("key1", "One");
 map.put("key2", "Two");
          
  Map<String, Object> map2 = new HashMap<String, Object>();
  map2.put("key1", "Three");
  map2.put("key2", "Four");
         
 list.add(map);
 list.add(map2);
         
 JSONArray j = JSONArray.parseArray(JSON.toJSONString(list));
          
 for(int i=0; i<j.size(); i++){
     System.out.println(j.get(i));

  

輸出結果:

 {"key1":"One","key2":"Two"}
 {"key1":"Three","key2":"Four"}

  

FastJSON 簡單使用