成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Gson簡(jiǎn)明處理

wangbjun / 753人閱讀

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

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

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

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

接著我們實(shí)例化Gson類(lèi),并調(diào)用其toJson方法對(duì)1個(gè)對(duì)象進(jìn)行序列化處理:

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

其結(jié)果如下所示:

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

可以說(shuō)是1個(gè)非常簡(jiǎn)單的例子。但是上面的方式,對(duì)于數(shù)值為null的情況會(huì)忽略掉對(duì)應(yīng)的鍵名,如下所示:

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

其結(jié)果為:

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

此時(shí)我們可以使用如下的方式進(jìn)行序列化:

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

另外,默認(rèn)的序列化是沒(méi)有美化效果的,看起來(lái)不是很方便,此時(shí)我們可以添加setPrettyPrinting方法來(lái)設(shè)置其為美化的輸出:

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

相應(yīng)的結(jié)果立即就變成了:

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

除此之外,我們還可以對(duì)類(lèi)進(jìn)行實(shí)例化,比如我們有如下1個(gè)簡(jiǎn)單的類(lèi):

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

接著我們?cè)龠M(jìn)行實(shí)例化處理:

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

其結(jié)果為:

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

可以看到,對(duì)應(yīng)類(lèi)的屬性都被實(shí)例化了。另外,在這里我們對(duì)類(lèi)的toString進(jìn)行了重載,也是1種序列化的方式。
另1個(gè)比較有意思的地方,可能就是使用注解的方式來(lái)進(jìn)行序列化處理了,例如:

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這個(gè)2個(gè)屬性,其中屬性name序列化時(shí)候的名稱(chēng)為username,之后我們調(diào)用GsonBuilder進(jìn)行處理可以得到:

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

反序列化

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

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

由于我們之前重載了對(duì)應(yīng)類(lèi)的toString方法,因此其結(jié)果為:

張三:23:男

另1個(gè)就是對(duì)之前新建的HashMap進(jìn)行反序列化處理:

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

其結(jié)果為:

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

通過(guò)反序列化,在調(diào)用Jest時(shí)對(duì)于返回的數(shù)據(jù),我們就可以進(jìn)行篩選,去除一些不需要的內(nèi)容再序列化返回到前端。
而Gson還有一些其他的內(nèi)容,比如對(duì)指定類(lèi)型的序列化處理,這里就不敘述了,可以參考。

參考文章:

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77213.html

相關(guān)文章

  • 追蹤解析Gson源碼(1)

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

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

    摘要:六修改內(nèi)部類(lèi)的方法這個(gè)的方法是對(duì)類(lèi)型的數(shù)據(jù)進(jìn)行解析,我們判斷輸入的數(shù)據(jù)類(lèi)型不是類(lèi)型,就直接跳過(guò)解析,核心是在方法中插入方法。每一個(gè)類(lèi)每一個(gè)內(nèi)部類(lèi)每一個(gè)匿名內(nèi)部類(lèi),都會(huì)生成一個(gè)獨(dú)立的文件,如。 一、項(xiàng)目地址 項(xiàng)目地址:github-gson-plugin 二、ReaderTools解析 /** * Created by tangfuling on 2018/10/23. */ pu...

    oujie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<