解決fastjson、Jackson、Gson解析Json數據時,key爲Java中關鍵字無法解析的問題

博文首次發佈於個人博客:吾勇士的博客

無論我們在使用fastjson、Jackson還是Gson,我們在用json轉換爲實體類時,都是根據json數據建立對應實體類,但比較噁心的是,有時,有些服務商返回的json報文中,key值爲java中的關鍵字,我們沒法用關鍵字,當做一個類的成員變量,不過不代表我們就沒有其他的辦法解決了;

先給個測試實體類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
publicclass ClientInfoEntity  {
 
    privateLong id;
 
    // 客戶編號
    @SerializedName("abstract")
    @JSONField(name="abstract")
    privateString abstract_;
 
    @Override
    publicString toString() {
        return"ClientInfoEntity [id=" + id + ", abstract_=" + abstract_ + "]";
    }
 
 
    publicString getAbstract_() {
        returnabstract_;
    }
 
 
    publicvoid setAbstract_(String abstract_) {
        this.abstract_ = abstract_;
    }
 
 
    publicvoid setId(Long id) {
        this.id = id;
    }
     
     
}

解決方案如下:

①使用fastjson:

則在實體類中的對應成員變量中加上以下註解:

?
1
2
@JSONField(name="abstract")
    privateString abstract_;

 

②使用gson

則在實體類中的對應成員變量中加上以下註解:

?
1
2
@SerializedName("abstract")
privateString abstract_;

③使用jackson

則在實體類中的對應成員變量中加上以下註解:

?
1
2
@JsonProperty("abstract")
privateString abstract_;

當然了,三種註解是不衝突的,如果項目中使用多種方式解析,可以將對應的註解都加上,如給的測試實體類,我就加了fastjson和gson的兩種註解

單元測試方法:

?
1
2
3
4
5
6
7
@org.junit.Test
 publicvoid testGson(){
     String json = "{id:1,abstract:231}";
     ClientInfoEntity clientInfoEntity =  newGson().fromJson(json, ClientInfoEntity.class);
     System.out.println(clientInfoEntity);
     System.out.println(JSON.parseObject(json, ClientInfoEntity.class));
 }

結果:

https://img.alicdn.com/imgextra/i3/1830641203/TB2esOJcEdnpuFjSZPhXXbChpXa_!!1830641203.jpg

 

發佈了150 篇原創文章 · 獲贊 403 · 訪問量 172萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章