国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在Java中使用GSON處理JSON數(shù)據(jù)的簡(jiǎn)易教程

在Java中使用GSON處理JSON數(shù)據(jù)

在Java開(kāi)發(fā)世界中,管理JSON數(shù)據(jù)可能是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。然而,由Google開(kāi)發(fā)的強(qiáng)大庫(kù)GSON可以簡(jiǎn)化Java對(duì)象和JSON字符串之間的轉(zhuǎn)換過(guò)程。本文將通過(guò)實(shí)際示例指導(dǎo)您了解GSON的基礎(chǔ)知識(shí),并展示面向?qū)ο缶幊蹋∣OP)原則在這個(gè)過(guò)程中扮演的關(guān)鍵角色。

什么是GSON?

GSON是一個(gè)Java庫(kù),簡(jiǎn)化了將Java對(duì)象轉(zhuǎn)換為JSON以及反向轉(zhuǎn)換的過(guò)程。它代表"Google's JSON",為開(kāi)發(fā)人員提供了在其Java對(duì)象和JSON數(shù)據(jù)之間無(wú)縫集成的能力。這意味著不需要手動(dòng)解析和格式化,使得處理JSON數(shù)據(jù)更加簡(jiǎn)單高效。

入門(mén)指南

要在項(xiàng)目中使用GSON庫(kù),您需要將其添加到項(xiàng)目的依賴(lài)項(xiàng)中。GSON是一個(gè)流行的Java庫(kù),用于將Java對(duì)象序列化為JSON,以及將JSON反序列化為Java對(duì)象。它提供了一種簡(jiǎn)單高效的方法來(lái)轉(zhuǎn)換JSON字符串和Java對(duì)象。

如果您使用的是Maven,可以通過(guò)將以下依賴(lài)項(xiàng)添加到項(xiàng)目的pom.xml文件中輕松引入GSON:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.9</version>
</dependency>

添加了這個(gè)依賴(lài)項(xiàng)后,您可以在代碼中使用GSON。

序列化:Java對(duì)象轉(zhuǎn)為JSON

考慮一個(gè)簡(jiǎn)單的`Person`類(lèi):

public class Person {
    private String name;
    private int age;
    // getters and setters
}

要將對(duì)象轉(zhuǎn)換為JSON,我們可以使用以下代碼對(duì)其進(jìn)行序列化:

import com.google.gson.Gson;
public class SerializationExample {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("John");
        person.setAge(20);
        Gson gson = new Gson();
        String json = gson.toJson(person);
        System.out.println(json);
    }
}

輸出結(jié)果將如下所示:

{"name":"John","age":20}

反序列化:JSON到Java對(duì)象

在GSON中,可以進(jìn)行反向過(guò)程,將JSON轉(zhuǎn)換回對(duì)象。如果您之前將對(duì)象轉(zhuǎn)換為JSON格式,并且現(xiàn)在需要檢索原始對(duì)象,則此功能非常有用。該過(guò)程涉及使用GSON庫(kù)對(duì)JSON字符串進(jìn)行反序列化并將其轉(zhuǎn)換為對(duì)象??梢允褂胒romJson()方法來(lái)完成,該方法接受JSON字符串和要?jiǎng)?chuàng)建的對(duì)象的類(lèi)作為參數(shù)。一旦JSON字符串被反序列化,將創(chuàng)建一個(gè)具有與原始對(duì)象相同屬性的新對(duì)象:

import com.google.gson.Gson;
public class DeserializationExample {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"Jane\",\"age\":25,\"studentId\":\"S67890\"}";
        Gson gson = new Gson();
        Student student = gson.fromJson(jsonString, Student.class);
        System.out.println("Name: " + student.getName());
        System.out.println("Age: " + student.getAge());
        System.out.println("Student ID: " + student.getStudentId());
    }
}

上述代碼將JSON字符串轉(zhuǎn)換回`Student`對(duì)象。

GSON注解

GSON提供了各種注解來(lái)自定義序列化和反序列化過(guò)程:

@SerializedName

允許您為JSON鍵指定自定義名稱(chēng)。例如:

public class Person {
    @SerializedName("full_name")
    private String name;
    private int age;
    // getters and setters
}

在此示例中,`@SerializedName`注解將JSON鍵更改為"full_name",而不是"name"。

@Expose

控制序列化和反序列化過(guò)程中字段的包含和排除。例如:

import com.google.gson.annotations.Expose;
public class Person {
    @Expose
    private String name;
    @Expose(serialize = false)
    private int age;
    // getters and setters
}

由于`serialize = false`,`age`字段將在序列化過(guò)程中被排除。

@Since和@Until

為字段指定版本信息。例如:

import com.google.gson.annotations.Since;
import com.google.gson.annotations.Until;
public class Product {
    @Since(1.0)
    private String name;
    @Until(2.0)
    private double price;
    // getters and setters
}

在此示例中,`name`字段包括在1.0及以上的版本中,而`price`字段包括在2.0版本之前。

在Gson中的面向?qū)ο缶幊?/h2>

面向?qū)ο缶幊蹋∣OP)是一種圍繞"對(duì)象"概念展開(kāi)的編程范式。在這個(gè)范式中,對(duì)象是軟件開(kāi)發(fā)的基本構(gòu)建塊。對(duì)象是類(lèi)的實(shí)例,類(lèi)是定義對(duì)象結(jié)構(gòu)和行為的藍(lán)圖。

面向?qū)ο缶幊痰乃膫€(gè)主要原則是封裝、繼承、多態(tài)和抽象。封裝是將對(duì)象的實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái),不讓外部世界看到。繼承是對(duì)象從其父類(lèi)繼承屬性和方法的能力。多態(tài)是對(duì)象具有多種形式的能力,允許以相同方式處理不同的對(duì)象。抽象是在忽略非本質(zhì)細(xì)節(jié)的情況下,專(zhuān)注于對(duì)象的基本特征。

除了這些原則之外,面向?qū)ο缶幊痰母拍钸€可以應(yīng)用于對(duì)象的序列化和反序列化過(guò)程。序列化是將對(duì)象轉(zhuǎn)換成易于存儲(chǔ)或傳輸?shù)母袷降倪^(guò)程。反序列化是將序列化后的對(duì)象恢復(fù)到原始形式的過(guò)程。在使用GSON時(shí),可以運(yùn)用面向?qū)ο缶幊痰脑瓌t確保序列化和反序列化的對(duì)象與其原始形式保持一致。

讓我們深入了解GSON中的多態(tài)和繼承:

Java中的繼承與GSON

繼承是面向?qū)ο缶幊讨械囊粋€(gè)基本概念。它允許子類(lèi)繼承父類(lèi)的屬性和行為。在使用Java中的GSON時(shí),了解如何管理繼承在序列化和反序列化過(guò)程中的應(yīng)用至關(guān)重要。

例如,假設(shè)我們有一個(gè)名為Vehicle的基類(lèi)和兩個(gè)子類(lèi)Car和Motorcycle。在這種情況下,我們需要探索GSON如何處理這些類(lèi)的序列化和反序列化:

class Vehicle {
    private String type;
    // 省略構(gòu)造函數(shù)、獲取器、設(shè)置器和其他方法以保持簡(jiǎn)潔性
    @Override
    public String toString() {
        return "Vehicle{" +
                "type='" + type + '\'' +
                '}';
    }
}
class Car extends Vehicle {
    private int numberOfDoors;
    // 省略構(gòu)造函數(shù)、獲取器、設(shè)置器和其他方法以保持簡(jiǎn)潔性
    @Override
    public String toString() {
        return "Car{" +
                "type='" + getType() + '\'' +
                ", numberOfDoors=" + numberOfDoors +
                '}';
    }
}
class Motorcycle extends Vehicle {
    private boolean hasSidecar;
    // 省略構(gòu)造函數(shù)、獲取器、設(shè)置器和其他方法以保持簡(jiǎn)潔性
    @Override
    public String toString() {
        return "Motorcycle{" +
                "type='" + getType() + '\'' +
                ", hasSidecar=" + hasSidecar +
                '}';
    }
}
public class InheritanceWithGsonExample {
    public static void main(String[] args) {
        // 創(chuàng)建Car和Motorcycle的實(shí)例
        Car car = new Car();
        car.setType("Car");
        car.setNumberOfDoors(4);
        Motorcycle motorcycle = new Motorcycle();
        motorcycle.setType("Motorcycle");
        motorcycle.setHasSidecar(true);
        // 使用Gson進(jìn)行序列化
        Gson gson = new Gson();
        String carJson = gson.toJson(car);
        String motorcycleJson = gson.toJson(motorcycle);
        System.out.println("Car JSON: " + carJson);
        System.out.println("Motorcycle JSON: " + motorcycleJson);
        // 使用Gson進(jìn)行反序列化
        Car deserializedCar = gson.fromJson(carJson, Car.class);
        Motorcycle deserializedMotorcycle = gson.fromJson(motorcycleJson, Motorcycle.class);
        System.out.println("Deserialized Car: " + deserializedCar);
        System.out.println("Deserialized Motorcycle: " + deserializedMotorcycle);
    }
}

上面的代碼演示了一個(gè)具有繼承和使用GSON進(jìn)行序列化/反序列化的類(lèi)層次結(jié)構(gòu)。Vehicle類(lèi)是基類(lèi),具有一個(gè)名為"type"的共有屬性。Car和Motorcycle類(lèi)是Vehicle的子類(lèi),它們繼承了"type"屬性,并具有與每種類(lèi)型車(chē)輛相關(guān)的其他屬性。InheritanceWithGsonExample類(lèi)展示了使用Gson對(duì)Car和Motorcycle對(duì)象進(jìn)行序列化和反序列化的過(guò)程。在序列化過(guò)程中,GSON會(huì)自動(dòng)包含來(lái)自父類(lèi)的字段,在反序列化過(guò)程中,它會(huì)正確地重建類(lèi)層次結(jié)構(gòu)。因此,輸出JSON將包含子類(lèi)和父類(lèi)的屬性。

在Java中使用GSON實(shí)現(xiàn)多態(tài)性

多態(tài)性是面向?qū)ο缶幊蹋∣OP)中的一個(gè)重要概念。它允許不同類(lèi)型的對(duì)象被視為共享類(lèi)型的對(duì)象。GSON利用@JsonSubTypes注解和RuntimeTypeAdapterFactory類(lèi)來(lái)支持多態(tài)性。

為了更好地理解這個(gè)概念,讓我們考慮一個(gè)名為"Shape"的接口的例子,該接口包含兩個(gè)實(shí)現(xiàn)類(lèi)"Circle"和"Rectangle":

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

interface Shape {
    double calculateArea();
}

class Circle implements Shape {
    private double radius;

    // 構(gòu)造函數(shù)、getter、setter和其他方法省略

    @Override
    public double calculateArea() {
        return Math.PI * Math.pow(radius, 2);
    }
}

class Rectangle implements Shape {
    private double length;
    private double width;

    // 構(gòu)造函數(shù)、getter、setter和其他方法省略

    @Override
    public double calculateArea() {
        return length * width;
    }
}

public class PolymorphismWithGsonExample {
    public static void main(String[] args) {
        // 創(chuàng)建Circle和Rectangle的實(shí)例
        Circle circle = new Circle();
        circle.setRadius(5);

        Rectangle rectangle = new Rectangle();
        rectangle.setLength(4);
        rectangle.setWidth(6);

        // 使用Gson和RuntimeTypeAdapterFactory進(jìn)行多態(tài)處理
        Gson gson = new GsonBuilder()
                .registerTypeAdapterFactory(RuntimeTypeAdapterFactory
                        .of(Shape.class, "type")
                        .registerSubtype(Circle.class, "circle")
                        .registerSubtype(Rectangle.class, "rectangle"))
                .create();

        // 序列化
        String circleJson = gson.toJson(circle, Shape.class);
        String rectangleJson = gson.toJson(rectangle, Shape.class);

        System.out.println("Circle JSON: " + circleJson);
        System.out.println("Rectangle JSON: " + rectangleJson);

        // 反序列化
        Shape deserializedCircle = gson.fromJson(circleJson, Shape.class);
        Shape deserializedRectangle = gson.fromJson(rectangleJson, Shape.class);

        System.out.println("Deserialized Circle Area: " + deserializedCircle.calculateArea());
        System.out.println("Deserialized Rectangle Area: " + deserializedRectangle.calculateArea());
    }
}

上面的代碼展示了Shape接口的實(shí)現(xiàn),該接口作為各種形狀的共享類(lèi)型,并具有名為calculateArea()的方法。代碼還包括Circle類(lèi)和Rectangle類(lèi),它們實(shí)現(xiàn)了Shape接口,并提供了各自特定的calculateArea()方法的實(shí)現(xiàn)。此外,PolymorphismWithGsonExample類(lèi)演示了如何使用GSON和RuntimeTypeAdapterFactory來(lái)序列化和反序列化Circle和Rectangle對(duì)象。RuntimeTypeAdapterFactory允許GSON在JSON表示中包含類(lèi)型信息,確保正確地反序列化實(shí)現(xiàn)公共Shape接口的不同類(lèi)型的對(duì)象。

結(jié)論

GSON是一個(gè)流行的Java庫(kù),提供了易于使用的API來(lái)將Java對(duì)象序列化為JSON(JavaScript Object Notation)格式,并從JSON反序列化為Java對(duì)象。GSON的一個(gè)重要特性就是它能夠無(wú)縫處理Java中的繼承和多態(tài)性。在面向?qū)ο缶幊讨校^承是一種允許一個(gè)新類(lèi)基于現(xiàn)有類(lèi)的屬性和方法的機(jī)制。而多態(tài)性則使得不同類(lèi)型的對(duì)象可以根據(jù)它們的共同接口或超類(lèi)被視為相同類(lèi)型的對(duì)象。

當(dāng)處理涉及類(lèi)層次結(jié)構(gòu)和接口實(shí)現(xiàn)的面向?qū)ο蟠a時(shí),GSON是一個(gè)強(qiáng)大的工具。它可以自動(dòng)處理具有共同超類(lèi)或接口的對(duì)象的序列化和反序列化。這意味著您不需要編寫(xiě)任何自定義代碼來(lái)處理具有不同類(lèi)型但共享屬性的對(duì)象的序列化和反序列化。

例如,假設(shè)您有一個(gè)類(lèi)層次結(jié)構(gòu),包含一個(gè)基類(lèi)和幾個(gè)派生類(lèi)。每個(gè)派生類(lèi)都有特定于該類(lèi)的額外屬性和方法。使用GSON,您可以序列化和反序列任何這些類(lèi)的對(duì)象,GSON將自動(dòng)處理繼承和多態(tài)性的細(xì)節(jié)。

總結(jié)起來(lái),GSON是處理具有繼承和多態(tài)關(guān)系的面向?qū)ο蟠a的有價(jià)值的工具。在序列化和反序列化具有不同類(lèi)型但共享屬性的對(duì)象時(shí),它可以節(jié)省時(shí)間和精力。


文章來(lái)源地址http://www.zghlxwxcb.cn/article/691.html

到此這篇關(guān)于在Java中使用GSON處理JSON數(shù)據(jù)的簡(jiǎn)易教程的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/691.html

如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)聯(lián)系站長(zhǎng)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android:Json-Gson數(shù)據(jù)解析

    ?JSONObject jsonObject = new JSONObject(); ? ? ? ? ? ? jsonObject.put(\\\"name\\\",\\\"admin\\\"); ? ? ? ? ? ? jsonObject.put(\\\"passWord\\\",\\\"123456\\\"); ? ? ? ? ? ? //jsonObject.getString(\\\"name\\\") ? ? ? ? ? ?// textView.setText(jsonObject.toString()); ? ? ? ? ? ? //谷歌:api ? ? ? ? ? ? JsonObject jsonObject1 = new JsonObject(); ? ? ?

    2024年02月17日
    瀏覽(24)
  • 使用gson轉(zhuǎn)化數(shù)據(jù)響應(yīng)給前端

    使用gson轉(zhuǎn)化數(shù)據(jù)響應(yīng)給前端

    ? ? 我們經(jīng)常用的有以下兩種MIME類(lèi)型映射? ?? ?

    2024年02月06日
    瀏覽(10)
  • 對(duì)象 和 json 互轉(zhuǎn) 四種方式 json-lib、Gson、FastJson、Jackson

    對(duì)象 和 json 互轉(zhuǎn) 四種方式 json-lib、Gson、FastJson、Jackson

    json-lib最開(kāi)始的也是應(yīng)用最廣泛的json解析工具,json-lib 不好的地方確實(shí)是依賴(lài)于很多第三方包, 包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar, 對(duì)于復(fù)雜類(lèi)型的轉(zhuǎn)換,json-lib對(duì)于json轉(zhuǎn)換成bean還有缺陷,比如一個(gè)類(lèi)里面會(huì)出

    2024年01月21日
    瀏覽(30)
  • [AIGC] Java序列化利器 gson

    前言: 本篇文章主要介紹了Gson庫(kù),從是什么、為什么、怎么用三個(gè)方面進(jìn)行了詳細(xì)的介紹。在是什么部分,介紹了Gson庫(kù)的作用和特點(diǎn);在為什么部分,介紹了為什么要使用Gson庫(kù);在怎么用部分,介紹了如何配置Gson對(duì)象、將Java對(duì)象序列化為JSON以及將JSON字符串反序列化為J

    2024年02月07日
    瀏覽(22)
  • Gson 庫(kù)的使用

    Gson 是由 Google 開(kāi)發(fā)的一個(gè)流行的 Java 庫(kù),用于處理 JSON 數(shù)據(jù)的序列化和反序列化。它提供了簡(jiǎn)單易用的 API,使得在 Java 應(yīng)用程序中操作 JSON 數(shù)據(jù)變得非常方便。 以下是 Gson 庫(kù)的一些主要特點(diǎn)和用法 Gson 提供了一個(gè)簡(jiǎn)單而直觀(guān)的 API,使得在 Java 應(yīng)用程序中進(jìn)行 JSON 數(shù)據(jù)的序列

    2024年02月22日
    瀏覽(16)
  • Gson 添加數(shù)據(jù)默認(rèn)值問(wèn)題記錄

    Gson 添加數(shù)據(jù)默認(rèn)值問(wèn)題記錄

    問(wèn)題:在用Gson add(key(string類(lèi)型),value(必須是JsonElement子類(lèi)))時(shí)發(fā)現(xiàn),value 傳了 \\\"\\\" 空字符串(非null),默認(rèn)解析后返回null? 雖說(shuō)影響不大、但是給后端傳數(shù)據(jù)時(shí)、如果后端沒(méi)有進(jìn)行null處理 就會(huì)拋異常(而且后端懶得睬你、人家就是不愿意改...)0.0?。? 1、問(wèn)題代碼

    2024年02月14日
    瀏覽(24)
  • Android應(yīng)用:實(shí)現(xiàn)網(wǎng)絡(luò)加載商品數(shù)據(jù)【OKHttp、Glide、Gson】

    Android應(yīng)用:實(shí)現(xiàn)網(wǎng)絡(luò)加載商品數(shù)據(jù)【OKHttp、Glide、Gson】

    實(shí)現(xiàn)網(wǎng)絡(luò)加載商品數(shù)據(jù)的功能: 1、在AndroidManifest.xml中聲明網(wǎng)絡(luò)權(quán)限; 2、在app/build.gradle中添加okhttp, glide, gson等必需的第3方庫(kù); 3、在MainActivity中通過(guò)OkHttpClient連接給定的Web服務(wù),獲取商品數(shù)據(jù);對(duì)應(yīng)的json數(shù)據(jù)為本地的json文件,名字為goods_list_data.json;數(shù)據(jù)內(nèi)容為:[ {“id”

    2024年02月08日
    瀏覽(28)
  • Android Studio最新好用的插件----Gson轉(zhuǎn)Java實(shí)體類(lèi)/Kotlin Data

    Android Studio最新好用的插件----Gson轉(zhuǎn)Java實(shí)體類(lèi)/Kotlin Data

    JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,易于閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。JSON是由JavaScript語(yǔ)言衍生而來(lái),但JSON并不是JavaScript的一種形式,它是一種獨(dú)立的格式,可以在任何編程語(yǔ)言中使用。 JSON數(shù)據(jù)由鍵值對(duì)組成,可以使用大括號(hào)來(lái)包含一組

    2024年02月12日
    瀏覽(19)
  • Gson與FastJson詳解

    Gson與FastJson詳解 Java與JSON 做什么? 將Java中的對(duì)象 快速的轉(zhuǎn)換為 JSON格式的字符串. 將JSON格式的字符串, 轉(zhuǎn)換為Java的對(duì)象. Gson 將對(duì)象轉(zhuǎn)換為JSON字符串 轉(zhuǎn)換JSON字符串的步驟: 引入JAR包 在需要轉(zhuǎn)換JSON字符串的位置編寫(xiě)如下代碼即可: String json = new Gson().toJSON(要轉(zhuǎn)換的對(duì)象); 案例

    2024年02月09日
    瀏覽(21)
  • Android Lottie加載gson文件動(dòng)畫(huà)

    Android Lottie加載gson文件動(dòng)畫(huà)

    一:Lottie的使用 在你工程的build.gradle文件里添加如下配置 二:布局文件直接引入LottieAnimationView 例如:文件放置目錄 如此,動(dòng)畫(huà)就能跑起來(lái)了: 1.lottie_fileName:在app/src/main/assets目錄下的動(dòng)畫(huà)json文件名。 2.lottie_loop:動(dòng)畫(huà)是否循環(huán)播放,默認(rèn)不循環(huán)播放。 3.lottie_autoPlay:動(dòng)畫(huà)

    2024年02月11日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包