[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?- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.serializer.SerializerFeature;
- publicclass MyJsonUtil {
- privatestaticfinal 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
- };
- publicstatic String toJson(Object object) {
- return JSON.toJSONString(object, features);
- }
- }
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>