使用Gson完成java对象的序列化和反序列化

news2024/11/22 9:12:54

一、前言:json是什么?,Gson是什么?

1.JSON(javaScript  Object Notation)

是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。

2.Gson

是Google提供的用来在java对象和JSON数据之间进行映射的java类库。可以将一个JSON字符串转成java对象。(反序列化)或者反过来(序列化)。gson可以运行于java项目而android本身就是java项目,因此Android也能使用gson。

3.引入依赖

implementation 'com.google.code.gson:gson:2.8.6'

4.代码编写位置

我们在使用android测试我们写的代码的时候,在src下面的test目录里面编写。同样我们可以看到src下面还有一个androidTest目录。androidTest安卓单元测试是运行到手机里面。main目录里面的代码是需要打包成apk然后运行到虚拟机上的,运行的是Android的手机的环境。test目录里面是在电脑上测试,运行的是电脑的环境是Java的环境。因此为了方便,小编只在java测试环境里面测试代码节省打包时间。

二、序列化

1.创建user对象

public class User {
    @Expose
    private String userName;
    @Expose
    private String password;
    @Expose
    private int age;
    @Expose
    private boolean isStudent;


    public String getUserName() {
        return userName;
    }

    public String getPassword() {
        return password;
    }

    public int getAge() {
        return age;
    }

    public boolean isStudent() {
        return isStudent;
    }

    public User(String userName, String password, int age, boolean isStudent) {
        this.userName = userName;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
    }
}

2.序列化测试

public class ObjectUnitTest {
    @Test
    public void testObject(){
        //java对象
        User user1 = new User("Andlin", "123", 23, false);
        //创建Goson提供的gson对象
        Gson gson = new Gson();
        //序列化
        String json = gson.toJson(user1);
        System.out.println("序列化"+json);
    }
}

3.测试结果

序列化是指:利用属性名作为key,属性值作为value记录到json数据里面

三、反序列化

1.测试代码


public class ObjectUnitTest {
    @Test
    public void testObject(){
        //java对象
        User user1 = new User("Andlin", "123", 23, false);
        //创建Goson提供的gson对象
        Gson gson = new Gson();
        //序列化
        String json = gson.toJson(user1);
        System.out.println("序列化"+json);


        //反序列化
        User user2 = gson.fromJson(json, User.class);
        System.out.println("反序列化"+user2.getUserName()+user2.getAge()+user2.getPassword()+user2.isStudent());
    }
}

2.测试结果

三、java中存在嵌套对象如何实现序列化和反序列化

1.创建user对象

public class User {
    @Expose
    private String userName;
    @Expose
    private String password;
    @Expose
    private int age;
    @Expose
    private boolean isStudent;
    @Expose
    private com.example.simplenotebook.xuliehuahefanxuliehua.bean.Job job;

    public String getUserName() {
        return userName;
    }

    public String getPassword() {
        return password;
    }

    public int getAge() {
        return age;
    }

    public boolean isStudent() {
        return isStudent;
    }

    public void setJob(Job job) {
        this.job = job;
    }

    public Job getJob() {
        return job;
    }

    public User(String userName, String password, int age, boolean isStudent) {
        this.userName = userName;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
    }
}

2.创建job对象

public class Job {
    private String name;
    private  int salary;

    public Job(String name, int salary) {
        this.name = name;
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "job{" +
                "name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }
}

3.嵌套对象实现序列化和反序列化测试代码

   @Test
    public void testNestedObject() {
        //java对象
        User user1 = new User("Anglin", "123", 23, false);
        Job job = new Job("工人", 1000);
        user1.setJob(job);
        //创建Gson提供的Gson对象
        Gson gson = new Gson();
        //序列化
        String json = gson.toJson(user1);
        System.out.println("序列化" + json);

        //反序列化
        User user2 = gson.fromJson(json, User.class);
        System.out.println("反序列化" + user2.getUserName() + user2.getAge() + user2.getPassword() + user2.isStudent()+user2.getJob());

    }

4.测试结果

5.总结

无论是多少嵌套只需要使用toJson和fromJson方法就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1305470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手持式心电图机|12道便携式心电图机主板方案定制

心电图机被广泛应用于心脏状况的监测,可以从多个角度观察心脏情况,及时反映患者的病情,以便医生和患者了解。触摸屏使得控制和信息录入变得轻松。心电图报告提供多种语言选择,便于上传信息,实现无纸化报告。同时&#…

现代雷达车载应用——第2章 汽车雷达系统原理 2.2节

经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.2 汽车雷达架构 从顶层来看,基本的汽车雷达由发射器,接收器和天线组成。图2.2给出了一种简化的单通道连续波雷达结构[2]。这…

三天搞定jmeter入门到入职全套教程之使用Jmeter录制脚本

相对于LoadRunner跟SilkPerformer来说,Jmeter确实有差距,但毕竟前两者太贵,Jmeter胜在免费开源。 先看下LoadRunner录制的脚本如下,美如画,结构清晰,易于修改编辑,比如做关联等。当然目前LoadR…

CSS Grid布局入门:从零开始创建一个网格系统

CSS Grid布局入门:从零开始创建一个网格系统 引言 在响应式设计日益重要的今天,CSS Grid布局系统是前端开发中的一次革新。它使得创建复杂、灵活的布局变得简单而直观。本教程将通过分步骤的方式,让你从零开始掌握CSS Grid,并在…

[湖湘杯 2021 final]MultistaeAgency

文章目录 题目是给了源码,我们先来看web的main.go package mainimport ("bytes""crypto/md5""encoding/json""fmt""io""io/ioutil""log""math/rand""net/http""o…

实验7:索引和视图定义

【实验目的】 1、了解索引和视图的含义 2、熟悉索引和视图的创建规则 3、掌握索引和视图的创建和管理 【实验设备及器材】 1、硬件:PC机; 2、软件:(1)Windows7; (2)Microsoft SQL Server 2012。 【主要内容】 索引的创建、删除、重建…

web如何实现录制音频,满满干货(下篇)

上篇中讲了,web如何实现录制音频,这一篇中,介绍如何播放录制好的音频,以及如何下载和上传音频。 播放 播放,其实就有很多种方法了,可以先上传到云服务器,然后生成链接,使用audio标…

AMC8历年真题在线练习、解析全新按年份独立,更便捷练习和巩固

告诉大家一个好消息! 根据家长朋友们的反馈,六分成长独家制作的AMC8美国数学竞赛的历年真题在练已全新架构和上线,改为了按年份独立一套试卷,这样在线练习加载更快,随需练习也更方便。 先来一睹为快,练习的…

什么是 AWS IAM?如何使用 IAM 数据库身份验证连接到 Amazon RDS(上)

驾驭云服务的安全环境可能很复杂,但 AWS IAM 为安全访问管理提供了强大的框架。在本文中,我们将探讨什么是 AWS Identity and Access Management (IAM) 以及它如何增强安全性。我们还将提供有关使用 IAM 连接到 Amazon Relational Database Service (RDS…

【Week P1】 MNIST手写数字识别

文章目录 一、环境配置1.1 安装环境1.2 设置环境,开始本文内容 二、准备数据三、搭建网络结构四、开始训练五、查看训练结果六、总结2.1 ⭐ torchvision.datasets.MNIST详解(Line4 & Line9)2.2 ⭐ torch.utils.data.DataLoader详解(Line4 & Line9)2.3 ⭐ sq…

《天天爱科学》期刊国家级知网投稿

《天天爱科学》国家级期刊知网收录,投稿方向:幼儿教育、基础教育文章,不收案例分析、教学设计、图表讲解、例题分析。 刊名:天天爱科学 主管单位:中国出版传媒股份有限公司 主办单位:人民文学出版社有限…

IM系统(即时通讯系统)初识

文章目录 IM系统概述即时通讯应用和即时通讯系统 现有系统添加IM功能早期即时通讯系统架构即时通讯系统的基本组成当代即时通讯系统常用架构 IM系统概述 IM是即时通讯的缩写,它指的是一种网络通讯技术,可以让用户在网络上进行实时的文字、语音、视频等多…

2023年第三季度全球SSD出货量环比增长24%,市场复苏!

根据Trendfocus发布的研究报告显示:2023年第三季度全球SSD出货量环比增长24%,达到9306万pcs,出货容量也增长了21%,达到7769EB。三星出货量市场TOP1,其次是WDC西部数据、金士顿、镁光Micron、海力士等。 由于PC OEM连续…

Leetcode—509.斐波那契数【简单】

2023每日刷题(五十七) Leetcode—509.斐波那契数 实现代码 int fib(int n){if(n 0) {return 0;}if(n 1) {return 1;}return fib(n-1) fib(n-2); }运行结果 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点…

免费素材网站合集,设计师赶快收藏

设计师通常去哪里找设计素材? 寻找高质量、免费的设计素材,给大家总结了15个网站,平面、UI、电商、网页等都可以找到不错的设计素材,赶紧收藏一波~ 即时设计资源广场 即时设计资源广场拥有数万件来自优秀设计师的精美设计作品&a…

高中生应该及早接触职业性格测试

性格是我们成长过程中日渐形成的、固有的特征和行为习惯,性格跟我们的成长环境有很大的关系,比如父母的教养方式,父母的性格特征,以及我们的朋友关系,课堂学习,知识积累。这是一个无数层面的综合。 每个人…

ARM day7

题目1&#xff1a;按键中断代码编写 代码&#xff1a; main.c #include "key_it.h"#include "led.h"void delay(int ms){int i,j;for(i0;i<ms;i){for(j0;j<2000;j);}}int main(){myall_led_init();key1_it_config();key2_it_config();key3_it_conf…

PPT制作的几个注意事项

PPT制作的几个注意事项 字数不可过多字体大小字体颜色排版问题PPT篇末致谢什么是好的PPT关于演讲不要念PPT说话时面向观众。讲话的时候抖腿其他 事先声明&#xff1a; 以下展示的PPT就PPT制作技巧而言&#xff0c;与其内容无关。 字数不可过多 做PPT最忌讳的就是满篇全是文字&…

宝塔 Warning: require(): open_basedir restriction in effect

去掉网站目录下的勾选&#xff0c;防跨站攻击&#xff08;open_basedir&#xff09;,然后重启php服务。

Enabling Application Engine Tracing 启用应用程序引擎跟踪

Enabling Application Engine Tracing 启用应用程序引擎跟踪 By default, all Application Engine traces are turned off. To see a trace or a combination of traces, set trace options before you run a program. 默认情况下&#xff0c;所有应用程序引擎跟踪都处于关闭…