gson快速入门和使用详解_gson引入-程序员宅基地

技术标签: java  json  

gson介绍

Google Gson是一个简单的基于Java的库,用于将Java对象序列化为JSON,反之亦然。 它是由Google开发的一个开源库。
以下几点说明为什么应该使用这个库 :
标准化 - Gson是一个由Google管理的标准化库。
高效 - 这是对Java标准库的可靠,快速和高效的扩展。
优化 - Gson库经过高度优化。
支持泛型 - 它为泛型提供了广泛的支持。
支持复杂的内部类 - 它支持具有深度继承层次结构的复杂对象。

gson引入

maven引入

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

gson的api快速入门

//javaBean-->json
    @Test
    public void test1(){
    
        Gson gson = new Gson();
        Person p = new Person("张三", "123", 500, new Book("三国演义", "罗贯中"));
        String json = gson.toJson(p);
        System.out.println(json);
    }
//json-->javaBean
    @Test
    public void test2(){
    
        String json = "{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}}";
        Gson gson = new Gson();
        Person p = gson.fromJson(json, Person.class);
        System.out.println(p.getUsername()+"--"+p.getBook().getName());
    }
//list-->json
    @Test
    public void test3() {
    
        List<Person> list = new ArrayList<Person>();
        Person p = new Person("张三", "123", 500, new Book("三国演义", "罗贯中"));
        list.add(p);
        p = new Person("李四", "123", 500, new Book("三国演义", "罗贯中"));
        list.add(p);
        Gson gson = new Gson();
        String gsonStr = gson.toJson(list);
        System.out.println(gsonStr);
    }
//map-->json
    @Test
    public void test4() {
    
        Map<String, Person> map = new HashMap<String, Person>();
        Person p = new Person("张三", "123", 500, new Book("三国演义", "罗贯中"));
        map.put("p1", p);
        p = new Person("李四", "123", 500, new Book("三国演义", "罗贯中"));
        map.put("p2", p);
        Gson gson = new Gson();
        String gsonStr = gson.toJson(map);
        System.out.println(gsonStr);
    }

//json-->list
    @Test
    public void test5() {
    
        String str = "[{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}},{\"username\":\"李四\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}}]";
        Gson gson = new Gson();
        List<Person> ps = gson.fromJson(str,new TypeToken<List<Person>>() {
      
        }.getType());
        for (Person person : ps) {
    
            System.out.println(person.getUsername()+"---"+person.getBook().getName());
        }

    }

//json-->map
    @Test
    public void test6(){
    
        String str = "{\"p1\":{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}},\"p2\":{\"username\":\"李四\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"红楼梦\",\"price\":0,\"author\":\"曹雪芹\"}}}";
        Gson gson = new Gson();
        Map<String, Person> map = gson.fromJson(str, new TypeToken<Map<String, Person>>(){
    }.getType());
        Set<String> keys = map.keySet();
        for(String key:keys){
    
            System.out.println(map.get(key).getUsername()+"--"+map.get(key).getBook().getName());
        }
    }
public class Person {
    

    private String username;
    private String password;
    private int money;
    private Book book;

    public Person() {
    
    }

    public Person(Book book) {
    
        this.book = book;
    }

    public Book getBook() {
    
        return book;
    }
    public void setBook(Book book) {
    
        this.book = book;
    }
    public String getUsername() {
    
        return username;
    }
    public void setUsername(String username) {
    
        this.username = username;
    }
    public String getPassword() {
    
        return password;
    }
    public void setPassword(String password) {
    
        this.password = password;
    }
    public int getMoney() {
    
        return money;
    }
    public void setMoney(int money) {
    
        this.money = money;
    }

    public Person(String username, String password, int money, Book book) {
    
        super();
        this.username = username;
        this.password = password;
        this.money = money;
        this.book = book;
    }

}
public class Book {
    

    private int id;
    private String name;
    private int price;
    private String author;
    private Detail detail;
    private Attribute attribute;

    public Attribute getAttribute() {
    
        return attribute;
    }
    public void setAttribute(Attribute attribute) {
    
        this.attribute = attribute;
    }
    public Detail getDetail() {
    
        return detail;
    }
    public void setDetail(Detail detail) {
    
        this.detail = detail;
    }
    public int getId() {
    
        return id;
    }
    public void setId(int id) {
    
        this.id = id;
    }
    public String getName() {
    
        return name;
    }
    public void setName(String name) {
    
        this.name = name;
    }
    public int getPrice() {
    
        return price;
    }
    public void setPrice(int price) {
    
        this.price = price;
    }
    public String getAuthor() {
    
        return author;
    }
    public void setAuthor(String author) {
    
        this.author = author;
    }
    public Book(String name, String author) {
    
        this.name = name;
        this.author = author;
    }
    public Book() {
    
    }

}

注意事项:
把json字符串转为集合时,​​new TypeToken<>(){}.getType()​​在eclipse中貌似不能够自动提示,如果你的电脑也是这样的话,建议这里的代码自己手动敲一下,eclipse只是不会自动提示,自己敲出来的是不会报错的,嗯,我就遇到这一个小小的问题,总体来说这个东东还是很好用的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/UncleTian/article/details/126656061

智能推荐

idea启动sentinel说找不到或无法加载该类 .port=8180_找不到或无法加载主类 .port=8180-程序员宅基地

文章浏览阅读1.4k次,点赞9次,收藏4次。idea启动sentinel说找不到或无法加载该类 .port=8180一、正常启动流程-Dserver.port=8180 -Dcsp.sentinel.dashboard.server=localhost:8180 -Dproject.name=sentinel-dashboard -jar (添加sentinel目录路径)sentinel-dashboard-1.8.0.jar二、出现说找不到或无法加载该类 .port=8180的解决方案idea问题新版不能直接识别命令参数要加单引号 ‘_找不到或无法加载主类 .port=8180

Redis序列化存储及其日期格式问题_redis 时间格式-程序员宅基地

文章浏览阅读4.7k次,点赞3次,收藏8次。万花从中过片页不沾身在模块开发中,使用Redis做缓存是非常常见的技术,当我们注入RedisTempate模板时redisTemplate.opsForValue().set("item_"+id,itemModel,10, TimeUnit.MINUTES);key我们可以用固定开头和商品id进行拼接,当然正常的项目开发中最好使用多级目录进行分类,这里只做演示使用可视化界面看到保存的数据是这样的这样的数据是很不容易阅读的,原因是Redis默认使用的是JAVA序列化方式,在序列化时使用了._redis 时间格式

编译原理学习(三)--语法分析树-程序员宅基地

文章浏览阅读3.4w次,点赞7次,收藏28次。语法分析树用图形方式展现了从文法的开始符号推导出相应语言中的符号串的过程。在具体理解语法分析树之前需要先理清楚一些基本概念:①.产生式用变量expr来表示表达式,用变量stmt表示语句,那么这个构造规则可以表示为:stmt---&gt;if(expr)stmtelse stmt其中的箭头(---&gt;)可以读作“可以具有以下形式”,这样的规则称为产生式。②.文法定义关于文法定义中的终结符和非终结..._语法分析树

vs中使用第三方库的方法_vs 如何使debug和release引用不同的dll-程序员宅基地

文章浏览阅读5.5k次,点赞4次,收藏8次。debug模式步骤如下: 首先,注意所给的库是64位的还是32位的,将平台与所给的库的平台保持一致。 (1) 工程下面新建一个“DLL”文件夹,将第三方库所需的头文件拷贝过来,然后在“DLL”文件夹中新建两个文件夹,命名分别为“debug”和“release”,在这两个文件夹中放对应“debug”和“release”版本的第三方lib文件和dll文件; 如下图所示: (2) 打开项目属性_vs 如何使debug和release引用不同的dll

Linux中yum命令详解_yum install fcgi是什么指令-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏19次。原文地址:http://www.cnblogs.com/chuncn/archive/2010/10/17/1853915.htmlyum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依_yum install fcgi是什么指令

安装QT5 出现错误 unkown type name ‘QApplication’ unkown type name ‘MainWindow’_qt5报错/home/user/桌面/finalwork_qjy219050725/mainwind-程序员宅基地

文章浏览阅读7.1k次,点赞17次,收藏29次。安装环境:win7windos qt5版本:qt-opensource-windows-x86-5.12.0.exe安装完成能运行,但是编译程序出现错误如下:unkown type name ‘QApplication’unkown type name ‘MainWindow’解决办法:帮助-》关于插件 去掉Clang Code Model那个勾,然后重启电脑参考文章:QT5.10.0安装教程图文教程以及安装成功QT5.10.0后环境配置图文教程..._qt5报错/home/user/桌面/finalwork_qjy219050725/mainwindow.h:44: error: unknow

随便推点

加载MNIST报错:[WinError 10060] 由于连接方在一段时间后没有正确答复解决办法_urlerror: <urlopen error [winerror 10060] 由于连接方在一段-程序员宅基地

文章浏览阅读2.5w次,点赞18次,收藏20次。转载:https://blog.csdn.net/landcruiser007/article/details/79346982tensorflow加载mnist数据集,一些书上和博客中的代码如下:from tensorflow.examples.tutorials.mnist import input_datamnist=input_data.read_data_sets("MNIS..._urlerror:

【Linux基础】第16讲 mkdir和rm命令选项-程序员宅基地

文章浏览阅读181次。不使用-p命令来创建文件夹依赖。使用-p来创建文件夹依赖。

jenkins重启 linux_Jenkins 自动部署-程序员宅基地

文章浏览阅读346次。连接服务器 首先要有一台自己的服务器,或者本机装一个虚拟机,系统最好使用Linux,用了Linux才能感觉到是真的比win好用。我就用自己的云服务器来举例。 打开终端使用ssh连接到服务器 ssh [email protected] 输入密码 ******安装组件 首先检查系统中是否安装java,可以用java -version,如果显示出java版本证明java已经安装,否..._liunx jenkins二进制怎么重启

关于用transmac黑苹果制作引导盘无法识别_transmac u盘 无法引导 csdn-程序员宅基地

文章浏览阅读3.5k次。第一种方法https://www.apple114.com/pages/macos/可以从这儿冲39块钱开通会员下载,好心人可以帮我下载一下,嘤嘤嘤第二种方法利用VMware安装虚拟器macos系统制作启动盘,比较麻烦参考教程https://www.cnblogs.com/macz/p/14863851.html插入u盘,将U盘在「磁盘工具」中初始化,并在「终端」输入一下命令,其中「MyVolume」代表自己的U盘名称,重要的事再说一遍 MyVolume 是你U盘的名字,格式化之后U盘的名字_transmac u盘 无法引导 csdn

计算机无法读取exe文件,电脑所有EXE文件都打不开的原因和多种解决方案-程序员宅基地

文章浏览阅读1.3w次,点赞6次,收藏14次。EXE文件是Windows的可执行文件,用于运行程序,正常情况下双击打开就可以运行了。今日,一些小伙伴说电脑所有exe文件打不开怎么回事?据调查一般都是由于病毒木马所致,这时候执行任何Exe文件都会出错,所有下文就给大家详解多种解决方案。软件解决方案:1.下载免费杀毒软件 金山毒霸20112.安装完毕后全盘扫描,这里就不再过多讲解,相信大家都会的。3.使用系统修复功能,恢复系统正常,一般系统里都安..._windows所有exe文件都打不开

自动记帐如何确定会计科目的借贷_sap移动类型怎么确定借贷-程序员宅基地

文章浏览阅读1.1w次。序:本文将向您提供SAP MM自动记帐如何确定会计科目的借贷,以及如何从前台物料移动操作反查到相应的会计凭证。 ----------------------------我是万恶的分割线------------------------------ 突然有个疑问,虽然在OBYC中事先维护好了科目的借贷方,但在实际的自动记帐过程中,系统是如何确定用的是借方科目还是贷方科目呢? 如上图,查看表_sap移动类型怎么确定借贷

推荐文章

热门文章

相关标签