fastjson解析泛型json字符串時空字段缺失的解決方法

場景如下:

有一個公共接口返回json字符串,但是json字符串表示的對象類型是不確定的,既可能是ClassA,也可能是ClassB。

public class ClassA{
   private String key;
   private String value;
   ...
}

public class ClassB{
   private String host;
   private int id;
   private String user;
   private String db;
   ...
}

//情況1:返回ClassA的json字符串
str = {"key":"user", "value":"ming"}
//情況2:返回ClassB的json字符串串
str = {"host":"localhost", "id":1, "user":"ming", "db":null}

遇到這種情況,我們一般會將結果解析爲JSONObject對象:

JSONObject obj = JSON.praseObject(str);

但是利用上述這種方法,將上述解析出來JSONObject,傳遞到其他接口(假設爲A)。
A 接收過來的JSONObject對象可能損失部分字段信息,比如上面str中db字段,打印時,db字段缺失。

因此,遇到這種情況的解決辦法:

HashMap<String, Object> result = JSON.parseObject(str, 
            new TypeReference<HashMap<String, Object>>(){});
JSONObject obj = JSON.praseObject(JSON.toJSONString(result, 
            SerializerFeature.WriteMapNullValue));

此時,將解析出來的JSONObject對象傳遞給其他接口,此時對象信息是完整的,
即字段不會缺失。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章