fastjson是什么东东?
是⼀个语⾔编写的⾼性能功能完善的库。它采⽤⼀种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是⽬前Java语⾔中最快的JSON库。Fastjson接⼝简单易⽤,已经被⼴泛使⽤在缓存序列化、协议交互、Web输出、Android客户端等多种应⽤场景。
depencency:
序列化
序列化就是指把JavaBean对象转成JSON格式的字符串。
com.alibaba.fastjson.JSON提供了许多⽅法(多态)实现序列化。
1.基本的序列化
String objJson = JSONString(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 = JSONString(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 = JSONString(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 = JSONString(user);
输出结果:
{"age":24,"userName":"李四"}
可以输出格式化后的 JSON 字符串。
String objJson = JSONString(Object object, boolean prettyFormat);
传⼊⼀个对象和⼀个布尔类型(是否格式化),将对象转成格式化后的JSON字符串。
例4:以例2代码为例。
String listJson = JSONString(list, true);
输出结果为:
1 [
javabean是干什么的2 {
3 "key1":"One",
4 "key2":"Two"
5 },
6 {
7 "key3":"Three",
8 "key4":"Four"
9 }
10 ]
FastJSON提供了许多特性⽀持。
String objJson = JSONString(Object object, features)
传⼊⼀个对象和SerializerFeature类型的可变变量。SerializerFeature是⼀个枚举。com.alibaba.fastjson.serializer.SerializerFeature
你可以根据⾃⼰的情况使⽤这些特性。
简单说下⼏个常⽤的特性:
1.⽇期格式化:
FastJSON可以直接对⽇期类型格式化,在缺省的情况下,FastJSON会将Date转成long。例5:FastJSON将java.util.Date转成long。
1 String dateJson = JSONString(new Date());
2
3 System.out.println(dateJson);
输出结果:
1401370199040
例6:使⽤SerializerFeature特性格式化⽇期。
1 String dateJson = JSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);
2
3 System.out.println(dateJson);
输出结果:
"2014-05-29 21:36:24"
也可以指定输出⽇期格式。
例7:指定输出⽇期格式。
1 String dateJson = JSONStringWithDateFormat(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 = JSONString(list, SerializerFeature.UseSingleQuotes);
输出结果:
[{'key1':'One','key2':'Two'},{'key3':'Three','key4':'Four'}]
3.JSON格式化。
例9:
String listJson = JSONString(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 = JSONString(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 = JSONString(user, SerializerFeature.WriteClassName);
输出结果:
{"@type":"User","age":18,"userName":"李四"}
由于序列化带了类型信息,使得反序列化时能够⾃动进⾏类型识别。
例12:将例11反序列化。
1 User user1 = (User) JSON.parse(listJson);
2
3 System.out.Age());
输出结果:
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.UserName());
输出结果:
李四
集合反序列化。
例14:将例2反序列化。
1 List<Map> list1 = JSON.parseArray(listJson, Map.class);
2
3 for(Map<String, Object> map : list1){
4 System.out.("key1"));
5 System.out.("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.("key1"));
3 System.out.("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.("key1"));
10 System.out.("key2"));
11 System.out.("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.JSONString(list));
15
16 for(int i=0; i<j.size(); i++){
17 System.out.(i));
18 }
输出结果:
1 {"key1":"One","key2":"Two"}
2 {"key1":"Three","key2":"Four"}
更多⽅法使⽤请参考API(没有注释的API,让我很头疼啊)。end
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论