国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Gson簡明處理

wangbjun / 734人閱讀

摘要:在包中有這么個的包用于對數據進行序列化處理。而還有一些其他的內容比如對指定類型的序列化處理這里就不敘述了可以參考。

原文地址:http://blog.52sox.com/use-gso...

關于為什么突然會使用Java,實際上還是公司要將之前原先Python開發的Elasticsearch搜索集成到到項目中,而必須在國慶前給出1個版本。真心的說,進度很趕,對于一個平時不怎么寫Java的Pythoner來說,花了1天的時間把對應的功能完成的70%,不得不說是1個奇跡。
在Jest包中,有這么1個Gson的包,用于對JSON數據進行序列化處理。這里我們多帶帶將其拿出來,稍微簡單的介紹一下,以后遇到同樣的問題的時候也不用慌。這里使用的gson版本為2.8.0
我們使用maven下載了對應的包后,首先進行如下的操作:

import com.google.gson.*;
序列化

接著我們實例化Gson類,并調用其toJson方法對1個對象進行序列化處理:

import java.util.*;

...

public class demo {
    public static void main(String[] args){
        Gson json = new Gson();
        HashMap map = new HashMap<>();
        ArrayList arr = new ArrayList<>();
        arr.add("張三");
        arr.add("李四");
        map.put("person", arr);
        String str = json.toJson(map);
        System.out.println(str);
    }
}

其結果如下所示:

{"person":["張三","李四"]}

可以說是1個非常簡單的例子。但是上面的方式,對于數值為null的情況會忽略掉對應的鍵名,如下所示:

HashMap map = new HashMap<>();
ArrayList arr = new ArrayList<>();
arr.add("張三");
arr.add("李四");
map.put("person", arr);
map.put("gender", null);
String str = json.toJson(map);

其結果為:

{"person":["張三","李四"]}

此時我們可以使用如下的方式進行序列化:

GsonBuilder json = new GsonBuilder();
String str = json.serializeNulls().create().toJson(map);

另外,默認的序列化是沒有美化效果的,看起來不是很方便,此時我們可以添加setPrettyPrinting方法來設置其為美化的輸出:

String str = json.serializeNulls().setPrettyPrinting().create().toJson(map);

相應的結果立即就變成了:

{
  "gender": null,
  "person": [
    "張三",
    "李四"
  ]
}

除此之外,我們還可以對類進行實例化,比如我們有如下1個簡單的類:

class Person {
    private String name = "張三";
    private int age = 23;
    private String gender = "男";
    
    @Override
    public String toString(){
        return name + ":" + age + ":" + gender;
    }
}

接著我們再進行實例化處理:

Person person = new Person();
String str = json.toJson(person);
System.out.println(str);

其結果為:

{"name":"張三","age":23,"gender":"男"}

可以看到,對應類的屬性都被實例化了。另外,在這里我們對類的toString進行了重載,也是1種序列化的方式。
另1個比較有意思的地方,可能就是使用注解的方式來進行序列化處理了,例如:

import com.google.gson.annotations.*;

class Person {
    @SerializedName("username")
    @Expose(serialize = true)
    private String name = "張三";
    private int age = 23;
    @Expose(serialize = true)
    private String gender = "男";
}

...
Person person = new Person();
String str2 = json.serializeNulls().excludeFieldsWithoutExposeAnnotation().create().toJson(person);
System.out.println(str2);

在這里我們只序列化name和gender這個2個屬性,其中屬性name序列化時候的名稱為username,之后我們調用GsonBuilder進行處理可以得到:

{"username":"張三","gender":"男"}

反序列化

而對于反序列化處理,我們只需要使用fromJson函數即可,例如我們可以對之前的JSON數據進行反序列化處理:

Person info = json.create().fromJson(str2, Person.class);
System.out.println(info);

由于我們之前重載了對應類的toString方法,因此其結果為:

張三:23:男

另1個就是對之前新建的HashMap進行反序列化處理:

HashMap dict = json.create().fromJson(str, HashMap.class);
System.out.println(dict);

其結果為:

{gender=null, person=[張三, 李四]}

通過反序列化,在調用Jest時對于返回的數據,我們就可以進行篩選,去除一些不需要的內容再序列化返回到前端。
而Gson還有一些其他的內容,比如對指定類型的序列化處理,這里就不敘述了,可以參考。

參考文章:

http://www.javadoc.io/doc/com...
https://www.cnblogs.com/mafly...
https://www.cnblogs.com/majay...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77213.html

相關文章

  • 追蹤解析Gson源碼(1)

    摘要:版本版本簡介是谷歌開源的解析工具。其實幾款產品的差別都很細微,有谷歌的信仰加成,所以在這里進行一次源碼分析。至于和會在后續進行追蹤。 零 前期準備 0 FBI WARNING 文章異常啰嗦且繞彎。 1 版本 Gson 版本 : gson 2.8.5 IDE : idea 2018.3 2 Gson 簡介 Gson 是谷歌開源的 java json 解析工具。市場上同類的開源產品還有 F...

    sewerganger 評論0 收藏0
  • gson-plugin深入源碼分析(三)

    摘要:六修改內部類的方法這個的方法是對類型的數據進行解析,我們判斷輸入的數據類型不是類型,就直接跳過解析,核心是在方法中插入方法。每一個類每一個內部類每一個匿名內部類,都會生成一個獨立的文件,如。 一、項目地址 項目地址:github-gson-plugin 二、ReaderTools解析 /** * Created by tangfuling on 2018/10/23. */ pu...

    oujie 評論0 收藏0

發表評論

0條評論

wangbjun

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<