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);

输出结果:

{":null,":1}


JSONObject data1 = JSONObject.parSEObject(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":"李四"}

可以输出格式化后的 JSON 字符串。

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

传入一个对象和一个布尔类型(是否格式化),将对象转成格式化后的JSON字符串。

例4:以例2代码为例。

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:

由于序列化带了类型信息,使得反序列化时能够自动进行类型识别。

例12:将例11反序列化。

1 User user1 = (User) JSON.parse(listJson); 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.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

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

JSONObject,JSONArray是JSON的两个子类。

JSONObject相当于Map<String,Object>,

JSONArray相当于List<Object>。

简单方法示例:

例16:将Map转成JSONObject,然后添加元素,输出

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 }

更多方法使用请参考API(没有注释的API,让我很头疼啊)。


原文地址:http://www.cnblogs.com/Jie-Jack/p/3758046.html

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...