fastJson序列化和反序列化 中空字串的處理
阿新 • • 發佈:2019-01-04
json在我們開發的過程中被大量的使用,有的時候我們需要在序列化和反序列化的時候對某些欄位或者某種型別的值做特殊對待。比如有時候沒有值的數值型別預設值是0,或者序列化的時候為了節省空間把空值給過濾掉,還有的用於restful的介面的時候會需要把空欄位序列化出來,反序列化的時候也需要出來等等。
我這邊的總結來源場景是restful介面的,目的是在任何處理的過程中都要帶著空字串的屬性key
我們這邊的技術使用的阿里巴巴的fastjson,它對序列化和反序列化都提供了一系列的配置引數列舉SerializerFeature和Feature
序列化的時候我們使用SerializerFeature.WriteMapNullValue把所有的空欄位都序列化到json串中了
反序列化的時候,如果反序列成jsonObject這種情況下,沒有找到保留下來空串的情況。
我這邊最終使用的是反序列化的時候傳入一個MAP。class這樣就可以保留下所有的屬性了,當然如果存在對應的javaBean的時候傳入bean。class是最好的了。
關於反序列化的Feature列舉目前還沒有過多的去看。先記錄下,有時間了看下然後在這會繼續完善。
測試程式碼如下
package com.example.json;
/**
* 類DemoBean.java的實現描述:TODO 類實現描述
*
* @author xupeng 2017年6月23日 上午10:55:36
*/
public class DemoBean {
private String name;
private String nickName;
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public DemoBean() {
super();
// TODO Auto-generated constructor stub
}
public DemoBean(String name, String nickName) {
super ();
this.name = name;
this.nickName = nickName;
}
}
package com.example.json;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializerFeature;
/**
* 類JsonDemo.java的實現描述:TODO 類實現描述
*
* @author xupeng 2017年6月23日 上午10:55:59
*/
public class JsonDemo {
public static void main(String[] args) {
String str = JSON.toJSONString(new DemoBean("徐朋", null), SerializerFeature.WriteMapNullValue);
System.out.println(str);
Map jsonObject = JSON.parseObject(str,Map.class);
System.out.println(jsonObject.get("name"));
System.out.println(jsonObject.get("nickName"));
DemoBean bean = JSON.parseObject(str, DemoBean.class);
System.out.println(bean.getName());
System.out.println(bean.getNickName());
}
}