前端之家收集整理的这篇文章主要介绍了
FastJSON 转换保存null值,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
缺省情况下FastJSON不输入为值Null的字段,可以使用SerializerFeature.WriteMapNullValue使其输出。
例10:
1 Map<String,Object> map = new HashMap<String,Object>();
2
3 String b = null;
4 Integer i = 15
6 map.put("a",b);
7 map.put(b8
9 String listJson = JSON.toJSONString(map,SerializerFeature.WriteMapNullValue);
输出结果:
JSONObject data1 = JSONObject.par
SEObject(json);
String string = JSON.toJSONString(data1,SerializerFeature.WriteMapNullValue);
System.out.println(string);
Fastjson的SerializerFeature序列化属性
QuoteFieldNames———-输出key时是否使用双引号,默认为true
WriteMapNullValue——–是否输出值为null的字段,默认为false
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty—–List字段如果为null,输出为[],51); font-size:14px">WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,51); font-size:14px">WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
FastJSON是一个Java语言编写的高性能,功能完善,完全支持http://json.org的标准的JSON库。多了不说了,百度一下一大把。
在此,简单的总结一下自己用过,测试过的方法。
如果使用Maven,在pom.xml文件加入以下依赖。
1 <dependency>
2 groupId>com.alibaba</3 artifactId>fastjson4 version>1.1.235 >
序列化
序列化就是指 把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 = 4 map1.put("key1",128); line-height:1.5!important"> 5 map1.put("key2",128); line-height:1.5!important"> 6
7 Map<String,Object> map2 = 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);
5 String userJson = JSON.toJSONString(user);
{"age":24,"userName":"李四"}
String objJson = JSON.toJSONString(Object object,boolean prettyFormat);
String listJson = JSON.toJSONString(list,255); line-height:1.5!important">true);
1
[
2 {
3 "key1":"One"
, 4 "key2":"Two"
5 },128); line-height:1.5!important"> 6 {
7 "key3":"Three"
,128); line-height:1.5!important"> 8 "key4":"Four"
9 }
10 ]
FastJSON提供了许多特性支持。
传入一个对象和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特性格式化日期。
new
Date(),SerializerFeature.WriteDateUseDateFormat);
"2014-05-29 21:36:24"
也可以指定输出日期格式。
例7:指定输出日期格式。
1 String dateJson = JSON.toJSONStringWithDateFormat(
new Date(),"yyyy-MM-dd HH:mm:ss.SSS"
);
"2014-05-29 21:47:00.154"
2.使用单引号。
例8:以例2为例。
[{'key1':'One','key2':'Two'},{'key3':'Three','key4':'Four'}]
3.JSON格式化。
例9:
输出结果:与例4结果一致。
4.输出Null字段。
缺省情况下FastJSON不输入为值Null的字段,可以使用SerializerFeature.WriteMapNullValue使其输出。
例10:
3 String b =
null;
4 Integer i =
1;
5
6 map.put(
",128); line-height:1.5!important">7 map.put(
8
9 String listJson = JSON.toJSONString(map,SerializerFeature.WriteMapNullValue);
5.序列化是写入类型信息。
例11:
3 user.setAge(18);
4 user.setUserName(李四");
6 String listJson = JSON.toJSONString(user,SerializerFeature.WriteClassName);
@typeUser",0); line-height:1.5!important">age18,0); line-height:1.5!important">userName"}
由于序列化带了类型信息,使得反序列化时能够自动进行类型识别。
例12:将例11反序列化。
1 User user1 = (User) JSON.parse(listJson);
3 System.out.println(user1.getAge());
输出结果:
如果User序列化是没有加入类型信息(SerializerFeature.WriteClassName),按照例12的做法就会报错(java.lang.ClassCastException)。
反序列化
反序列化就是把JSON格式的字符串转化为Java Bean对象。
com.alibaba.fastjson.JSON提供了许多方法(多态)实现反序列化。
简单举几个例子。
指定Class信息反序列化。
例13:将例3反序列化。
1 User user1 = JSON.par
SEObject(userJson,User.
class);
2 System.
out.println(user1.getUserName());
李四
集合反序列化。
例14:将例2反序列化。
1 List<Map> list1 = JSON.parseArray(listJson,Map.2
3 for(Map<String,Object> map : list1){
4 System.out.println(map.get(key1"));
5 System.key2"));
6 }
1 One
2 Two
3 Three
4 Four
泛型的反序列化(使用TypeReference传入类型信息)。
例15:将例1反序列化。
new TypeReference<Map<String,Object>>(){});
out.println(map1."));
2 Two
---------------------------------------------------------------------------------------------------------------------------------------------------------
1 Map<String,128); line-height:1.5!important"> 2 map.put("key1",128); line-height:1.5!important"> 3 map.put("key2",128); line-height:1.5!important"> 4
5 JSONObject j =
new JSONObject(map);
6
7 j.put("key3",128); line-height:1.5!important"> 8
9 System.out.println(j.get("key1"
));
10 System.out.println(j.get("key2"
));
11 System.out.println(j.get("key3"));
输出结果:
3 Three
例17:将List对象转成JSONArray,然后输出。
4 map.put("key1",128); line-height:1.5!important"> 5 map.put("key2",128); line-height:1.5!important">11
list.add(map);
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,让我很头疼啊)。
原文地址:http://www.cnblogs.com/Jie-Jack/p/3758046.html