1. 程式人生 > >[Java]fastJson的簡單使用

[Java]fastJson的簡單使用

FastJSON是一個Java語言編寫的高效能,功能完善,的JSON庫。多了不說了,百度一下一大把。

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

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

1 <dependency>
2     <groupId>com.alibaba</groupId>
3     <artifactId>fastjson</artifactId>
4     <version>1.1.23</version>
5 </dependency>

序列化

序列化就是指 把JavaBean物件轉成JSON格式的字串。

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

1.基本的序列化

String objJson = JSON.toJSONString(Object object);

傳入一個物件,將物件轉成JSON字串。

例1:將Map轉成JSON

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

輸出結果:

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

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

複製程式碼
 1 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
 2         
 3 Map<String, Object> map1 = new HashMap<String, Object>();
 4 map1.put("key1", "One");
 5 map1.put("key2", "Two");
6 7 Map<String, Object> map2 = new HashMap<String, Object>(); 8 map2.put("key1", "Three"); 9 map2.put("key2", "Four"); 10 11 list.add(map1); 12 list.add(map2); 13 14 String listJson = JSON.toJSONString(list);
複製程式碼

輸出結果:

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

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

1 User user = new User();
2 user.setUserName("李四");
3 user.setAge(24);
4         
5 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);

輸出結果為:

複製程式碼
 1 [
 2     {
 3         "key1":"One",
 4         "key2":"Two"
 5     },
 6     {
 7         "key3":"Three",
 8         "key4":"Four"
 9     }
10 ]
複製程式碼

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。

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

輸出結果:

1401370199040

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

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

輸出結果:

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

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

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

1 String dateJson = JSON.toJSONStringWithDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
2         
3 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

複製程式碼
1 Map<String, Object> map = new HashMap<String,Object>();
2         
3 String b = null;
4 Integer i = 1;
5         
6 map.put("a", b);
7 map.put("b", i);
8         
9 String listJson = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);
複製程式碼

輸出結果:

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

5.序列化是寫入型別資訊。

例11

1 User user = new User();
2         
3 user.setAge(18);
4 user.setUserName("李四");
5         
6 String listJson = JSON.toJSONString(user, SerializerFeature.WriteClassName);

輸出結果:

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

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

例12:將例11反序列化。

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

輸出結果:

18

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

反序列化

反序列化就是把JSON格式的字串轉化為Java Bean物件。

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

 簡單舉幾個例子。

指定Class資訊反序列化。

例13:將例3反序列化。

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

輸出結果:

李四

集合反序列化。

例14:將例2反序列化。

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

輸出結果:

1 One
2 Two
3 Three
4 Four

泛型的反序列化(使用TypeReference傳入型別資訊)。

例15:將例1反序列化。

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

輸出結果:

1 One
2 Two

———————————————————————————————————————————————————

JSONObject,JSONArray是JSON的兩個子類。

JSONObject相當於Map<String, Object>,

JSONArray相當於List<Object>。

簡單方法示例:

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

複製程式碼
 1 Map<String, Object> map = new HashMap<String, Object>();
 2 map.put("key1", "One");
 3 map.put("key2", "Two");
 4                            
 5 JSONObject j = new JSONObject(map);
 6                    
 7 j.put("key3", "Three");
 8           
 9 System.out.println(j.get("key1"));
10 System.out.println(j.get("key2"));
11 System.out.println(j.get("key3"));
複製程式碼

輸出結果:

1 One
2 Two
3 Three

例17:將List物件轉成JSONArray,然後輸出。

複製程式碼
 1 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
 2         
 3 Map<String, Object> map = new HashMap<String, Object>();
 4 map.put("key1", "One");
 5 map.put("key2", "Two");
 6         
 7 Map<String, Object> map2 = new HashMap<String, Object>();
 8 map2.put("key1", "Three");
 9 map2.put("key2", "Four");
10         
11 list.add(map);
12 list.add(map2);
13         
14 JSONArray j = JSONArray.parseArray(JSON.toJSONString(list));
15          
16 for(int i=0; i<j.size(); i++){
17     System.out.println(j.get(i));
18 }
複製程式碼

輸出結果:

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

更多方法使用請參考API(沒有註釋的API,讓我很頭疼啊)。

end

簡單附上自己寫的json工具類:

[java] view plain copy print?
  1. import com.alibaba.fastjson.JSON;  
  2. import com.alibaba.fastjson.serializer.SerializerFeature;  
  3. publicclass MyJsonUtil {  
  4.     privatestaticfinal SerializerFeature[] features = {SerializerFeature.WriteMapNullValue, // 輸出空置欄位
  5.                                                          // SerializerFeature.WriteNullListAsEmpty,
  6.                                                          // // list欄位如果為null,輸出為[],而不是null
  7.                                                          // SerializerFeature.WriteNullNumberAsZero,
  8.                                                          // // 數值欄位如果為null,輸出為0,而不是null
  9.                                                          // SerializerFeature.WriteNullBooleanAsFalse,
  10.                                                          // // Boolean欄位如果為null,輸出為false,而不是null
  11.                                                          // SerializerFeature.WriteNullStringAsEmpty,
  12.                                                          // // 字元型別欄位如果為null,輸出為”“,而不是null
  13.                                                          SerializerFeature.WriteDateUseDateFormat // 日期格式化yyyy-MM-dd
  14.                                                                                                   // HH:mm:ss
  15.     };  
  16.     publicstatic String toJson(Object object) {  
  17.         return JSON.toJSONString(object, features);  
  18.     }  
  19. }  
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class MyJsonUtil {

    private static final SerializerFeature[] features = {SerializerFeature.WriteMapNullValue, // 輸出空置欄位
                                                         // SerializerFeature.WriteNullListAsEmpty,
                                                         // // list欄位如果為null,輸出為[],而不是null
                                                         // SerializerFeature.WriteNullNumberAsZero,
                                                         // // 數值欄位如果為null,輸出為0,而不是null
                                                         // SerializerFeature.WriteNullBooleanAsFalse,
                                                         // // Boolean欄位如果為null,輸出為false,而不是null
                                                         // SerializerFeature.WriteNullStringAsEmpty,
                                                         // // 字元型別欄位如果為null,輸出為"",而不是null
                                                         SerializerFeature.WriteDateUseDateFormat // 日期格式化yyyy-MM-dd
                                                                                                  // HH:mm:ss
    };

    public static String toJson(Object object) {
        return JSON.toJSONString(object, features);
    }
}


        </div>
            </div>