返回顶部
首页 > 资讯 > 精选 >Android中Gson怎么用
  • 107
分享到

Android中Gson怎么用

2023-06-25 21:06:51 107人浏览 安东尼
摘要

小编给大家分享一下Android中Gson怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 导入Android Studio工程dependencies {    

小编给大家分享一下Android中Gson怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

1. 导入Android Studio工程

dependencies {    implementation 'com.Google.code.gson:gson:2.8.4'}

2. 简单的 Java Object 序列化/反序列化

序列化

假如有一个User类,拥有 name, email, age, isDeveloper 四个属性,如下:

User userObject = new User(      "NORMan",     "norman@futurestud.io",     26,     true);

使用Gson将它序列化:

Gson gson = new Gson();String userJSON = gson.tojson(userObject);

得到的结果如下:

{"isDeveloper":true,"name":"Norman","age":26,"email":"norman@futurestud.io"}

反序列化

先定义一段JSON字符串

String userJson = "{'isDeveloper':false,'name':'xiaoqiang','age':26,'email':'578570174@qq.com'}";

Gson反序列化

User user = gson.fromJson(userJson, User.class);

debug一下,查看结果

Android中Gson怎么用

反序列化成功!

3. 嵌套 Java Object 的序列化/反序列化

也就是说,一个类里面还包含有其它类。比如User类里面还有个用户地址UserAddress类,JSON结构如下:

{    "age": 26,    "email": "578570174@qq.com",    "isDeveloper": true,    "name": "chenrenxiang",    "userAddress": {        "city": "Magdeburg",        "country": "Germany",        "houseNumber": "42A",        "street": "Main Street"    }}

那么这种Java Object该如何序列化/反序列化呢?和上面一样。也就是说和 2 里面介绍的方法一样

4. Array 和 List 的序列化/反序列化

序列化

序列化和前面介绍的方法是一样的

反序列化

那就有些不同了,不然也不用分开写。

1 Array的反序列化

先假设有一个name数组,定义JSON格式如下:

String namesJson = "['xiaoqiang','chenrenxiang','hahaha']";

然后使用Gson去反序列化它:

Gson gson = new Gson();String[] nameArray = gson.fromJson(namesJson, String[].class);

得到的nameArray如下:

Android中Gson怎么用

其实这和 2 里面介绍的反序列化方法仍然是一样的。可以看到,Gson的反序列化都是调用 Gson.fromJson(...)方法,传入JSON字符串,以及这段JSON字符串对应的Object类型。

2 List的反序列化
String userJson = "[{'isDeveloper':false,'name':'xiaoqiang','age':26,'email':'578570174@qq.com'},{'isDeveloper':true,'name':'xiaoqiang123','age':27,'email':'578570174@gmail.com'}]";Gson gson = new Gson();Type userListType = new TypeToken<ArrayList<User>>(){}.getType();List<User> userList = gson.fromJson(userJson, userListType);

对于List,反序列化时必须提供它的Type,通过Gson提供的TypeToken<T>.getType()方法可以定义当前List的Type。反序列化后结果如下:

Android中Gson怎么用

那么,如果一个Java Object里包含List类型的变量,该如何反序列化这个Object呢?答案是,和 2 一样就行了,无需为其内部的List提供Type

5. Map 和 Set 的序列化/反序列化

Map我平时用的较多,Set用的就很少了,它们的序列化/反序列化方法和List都是一样的,反序列化的时候需要提供Type

变量值为null时的序列化/反序列化

仍然以User类为例,如果一个User对象,里面的某个值为null,那么其序列化出来后的结果会是什么样的呢?

先看序列化,我们先初始化一个User对象,并把其中的email变量赋值为null,再用Gson来序列化它,如下:

User user = new User(true, "chenrenxiang", 27, null);    Gson gson = new Gson();    String userJson = gson.toJson(user);

debug一下,得到结果如下:

Android中Gson怎么用

可见,当某个变量值为null时,Gson在序列化的时候直接把这个变量忽略了。

再来看下反序列化, 先定义一段JSON字符串,只给它一个变量值name,用User类来反序列化它,看得到的结果会是什么。

   String userJson = "{'name':'xiaoqiang'}";   Gson gson = new Gson();   User user = gson.fromJson(userJson, User.class);

Android中Gson怎么用

对于JSON字符串里没有的变量,Gson在反序列化时会给它一个默认值,int类型默认为0,bool类型默认为false,String类型默认为null。

有人不禁要问了,如果JSON字符串里某个变量的值为null,反序列化后的结果会是什么呢?我测试过了,和没有的结果是一样的。

7. 控制序列化/反序列化 的变量名称

仍然以User对象为例,目前User对象里有四个变量nameageemailisDeveloper。假如,某一天,JSON字符串的变量名name变成了fullName,无需紧张,我们不用把User类里的变量name改为fullName,然后把它的getset方法都改了,然后把用到get/set方法的地方全改过来。只需要用Gson提供的注解方法@SerializedName就行了,如下:

public class User {    private boolean isDeveloper;    @SerializedName("fullName")    private String name;    private int age;    private String email;    ...}

这样虽然JSON字符串里的变量名为fullName,但是反序列化后fullName的值会映射给name。同样,把一个User对象序列化,变量name会自动转换为fullName

然而现实远比想象中复杂,这个JSON有时候传的是fullName,有时候传的是name,这时该怎么办呢? 不用担心,@SerializedName 接受两个参数,valuealternate ,顾名思义,alternate 是备选变量名,比如下面这段代码:

public class User {    private boolean isDeveloper;    @SerializedName(value = "name", alternate = "fullName")    private String name;    private int age;    private String email;    ...}

如果JSON传的是name,那么就用name的值,如果传的是fullName,那么就用fullName的值。需要注意的是,alternate只是反序列化JSON的一个备选变量名,它不会影响序列化,User对象序列化后,会使用value定义的名称为变量名。

又想到有一个问题,在定义了value和alternate的情况下,假如JSON同时传来了name和fullName,User的name变量会接受哪个值呢? 经过测试,它会都接受。这样也是很合理的,因为Gson会对JSON中的变量一个一个地去解析,既然它可以接受name,也可以接受fullName,那么当同时传来这两个变量时,它就会分别把它们解析出来,并把值赋给User对象中的name变量。那么,name变量的值就会是后解析的那个JSON变量的值,因为它会把前一个值覆盖掉。

8. 序列化/反序列化过程中忽略某些变量

也许会出现这样的需求,在将某个对象序列化时,对象中的某些变量是不需要的。有可能在反序列化某个JSON字符串时,某些变量的值也是不需要的。这时就可以使用Gson提供的@Expose注解方法。使用方法如下:

public class User {      @Expose()    String name; // 参与序列化/反序列化    @Expose(serialize = false, deserialize = false)    String email; // 不参与序列化,也不参与反序列化    @Expose(serialize = false)    int age; // 只参与反序列化    @Expose(deserialize = false)    boolean isDeveloper; // 只参与序列化}

使用这个方法,可以非常灵活地控制对象的某个/某些变量参不参与序列化/反序列化

然而! 要使用这个注解来控制序列化/反序列化,就不能使用默认的Gson对象,新建Gson对象的方法如下:

GsonBuilder builder = new GsonBuilder();  builder.excludeFieldsWithoutExposeAnnotation();  Gson gson = builder.create();

注意:使用以上方式构建的Gson,在序列化/反序列化对象时,会排除所有没有添加@Expose注解的字段。

另一个选择,transient关键字 ,使用这个关键字,可以直接让变量不参与序列化/反序列化,如下:

public class User {      String name;    String email;    int age;    boolean transient isDeveloper; //不参与序列化/反序列化}

当然,使用默认的Gson对象就可以。

看完了这篇文章,相信你对“Android中Gson怎么用”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Android中Gson怎么用

本文链接: https://lsjlt.com/news/306413.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android中Gson怎么用
    小编给大家分享一下Android中Gson怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 导入Android Studio工程dependencies {    ...
    99+
    2023-06-25
  • Java Json API中Gson怎么用
    这篇文章主要介绍了Java Json API中Gson怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。GSON是Google开发的Java API,用于转换Java对象和...
    99+
    2023-06-17
  • Android Gson基本用法学习
    目录1. 导入Android Studio工程2. 简单的 Java Object 序列化/反序列化序列化反序列化3. 嵌套 Java Object 的序列化/反序列化4. Arra...
    99+
    2024-04-02
  • Gson中toJson和fromJson方法怎么用
    这篇文章将为大家详细讲解有关Gson中toJson和fromJson方法怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。引入依赖:pom.xml文件中加入<!-- https://mv...
    99+
    2023-06-25
  • Android中gson、jsonobject解析JSON的方法详解
    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从...
    99+
    2022-06-06
    方法 jsonobject gson Android
  • Android中使用Gson解析JSON数据的两种方法
    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就...
    99+
    2022-06-06
    gson解析json json数据 JSON 方法 gson Android
  • 怎么使用GSON解析JSON数据
    使用GSON解析JSON数据的步骤如下:1. 添加GSON库的依赖:在项目的build.gradle文件中添加以下依赖:```jav...
    99+
    2023-08-18
    GSON JSON
  • gson怎么解析json嵌套数组
    使用Gson解析嵌套数组的JSON,需要使用嵌套的Java对象来表示JSON结构。下面是一个示例代码,演示了如何使用Gson解析嵌套...
    99+
    2023-08-16
    gson json
  • Java中利用gson解析Json实例教程
    前言本文主要跟大家介绍了关于Java用gson解析Json的相关内容,分享出来供大家参考学习,需要的朋友们下面来一起看看吧。json数据{ "resultcode": "200", "reason": "successed!", "resu...
    99+
    2023-05-31
    java gson 解析json
  • Android利用Gson解析嵌套多层的Json的简单方法
    首先先讲一个比较简单点的例子(最简单的我就不讲啦,网上很多),帮助新手理解Gson的使用方法: 比如我们要解析一个下面这种的Json: String json = {"a"...
    99+
    2022-06-06
    方法 JSON gson 嵌套 Android
  • Android JSON数据与实体类之间的相互转化(GSON的用法)
    这篇文章就是示范如何用GSON把JSON数据与实体类进行相互转化,需要用到gson-2.3.1.jar这个包。直接贴代码了: import java.lang.refle...
    99+
    2022-06-06
    json数据 JSON 实体 gson 实体类 Android
  • Android中AIDL怎么用
    这篇文章主要介绍Android中AIDL怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!AIDL,即Android Interface Definition Language,Android接口定义语言。这门语言...
    99+
    2023-06-20
  • Android中NotificationListenerService怎么用
    这篇文章主要介绍了Android中NotificationListenerService怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用新建一服务类,使它继承Noti...
    99+
    2023-05-31
    android
  • Android中TextView怎么用
    这篇文章给大家分享的是有关Android中TextView怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。XML的几个特殊属性 android:autoLink 用于指定是否将文本转换成可点击的超链接形式,它...
    99+
    2023-05-30
    android textview
  • Android中relativelayout.layoutparams怎么用
    RelativeLayout.LayoutParams 是 RelativeLayout 的子类,用于设置子视图在 Relative...
    99+
    2024-02-29
    Android
  • android 中 webview 怎么用 localStorage
    我在 android里面 使用html5的 localStorage 为什么存不进去也读不出来呀? 网上搜了好多都没效果 mainWebView = (WebVi...
    99+
    2022-06-06
    localstorage webview Android
  • Android中Toast怎么使用
    这篇文章给大家分享的是有关Android中Toast怎么使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。老规矩,先上效果图吧主要实现了几种常用的方式:1.最基本的Toast系统自带Toast采用的是队列的方式,...
    99+
    2023-06-14
  • Android中CountDownTimer类怎么用
    这篇文章主要介绍Android中CountDownTimer类怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、概述项目中经常用到倒计时的功能,比如说限时抢购,手机获取验证码等等。而google官方也帮我们封装...
    99+
    2023-06-22
  • Android中ListView怎么使用
    这篇文章主要讲解了“Android中ListView怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android中ListView怎么使用”吧!一、具体思路1、创建Listview控...
    99+
    2023-06-22
  • Android中AssetManager怎么使用
    在Android中,AssetManager类用于访问应用程序的assets目录中的文件。可以通过以下步骤使用AssetManage...
    99+
    2023-09-26
    Android AssetManager
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作