GSON - JSON的拓展-程序员宅基地

技术标签: ViewUI  java  前端  json  

GSON使用概述

GSON弥补了JSON的许多不足的地方,在实际应用中更加适用于Java开发。在这里,我们主要讲解的是利用GSON来操作java对象和json数据之间的相互转换,包括了常见的对象序列化和反序列化的知识。

一、前言

因为json有2种类型:

  • 一种是对象,object -> {key:value,key:value,...}
  • 另一种是数组,array -> [value,value,...]

所以针对这两种类型,来展开对json数据的操作。

GSON在解析json的时候,大体上有2种类型,一种是直接在内存中生成object或array,通过手工指定key来获取值;另一种是借助javabean来进行映射获取值。

二、对 json 数据进行反序列化,得到java 对象

1、不借助java 类,直接解析json 数据

1、json 是对象类型

当ajax传过来的json数据属于对象时,不论这个对象简单还是复杂,都可以轻松地把它们给解析出来。

ajax传过来的json数据(是对象形式):

var data_json =  {
        "sex": '男',
        "hobby":["baskte","tennis"],
        "introduce": {
            "name":"tom",
            "age":23
        }
    };

data: JSON.stringify(data_json),

GSON解析:

BufferedReader reader = request.getReader();
    // 读取json数据
    StringBuffer buffer = new StringBuffer();
    String s;
    while ((s = reader.readLine()) != null) {
        buffer.append(s);
    }
    String json = buffer.toString();
    System.out.println("json:" + json);  

    // json解析器,解析json数据
    JsonParser parser = new JsonParser();
    JsonElement element = parser.parse(json);
    // json属于对象类型时
    if (element.isJsonObject()) {  
        JsonObject object = element.getAsJsonObject();  // 转化为对象

        // 1. value为string时,取出string
        String sex = object.get("sex").getAsString();                         System.out.println("sex:" + sex);

        // 2. value为array时,取出array
        JsonArray hobbies = object.getAsJsonArray("hobby");  // 
        for (int i = 0; i < hobbies.size(); i++) {
            String hobby = hobbies.get(i).getAsString();
            System.out.println("hobby:" + hobby);
        }

        // 3. value为object时,取出object
        JsonObject introduce = object.getAsJsonObject("introduce");
        String name = introduce.get("name").getAsString();
        int age = introduce.get("age").getAsInt();
        System.out.println("name:" + name+";age:" + age);
    }

解读:

很明显,对于传过来的对象类型的json数据,使用GSON是很方便进行解析的,在得到了json数据对应的JsonObject 对象之后,我们就可以很简单地进行操作了。这种方法是直接获取json中的值,而没有进行java对象的还原(简单情况下,没有必要生成相应的javabean)。

2、json 是数组类型

a

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

智能推荐

Mac快捷按键_mac检测按钮-程序员宅基地

文章浏览阅读728次。&amp;amp;amp;amp;amp;amp;nbsp;Mac OS快捷键:Shift + Command + A // 打开所有应用程序的文件夹Shift + Command + C // 打开我的电脑文件夹Shift + Command + D // 打开我的桌面文件夹Shift + Command + H // 打开当前用户Home目录Shift + Command + K // 打开网络(..._mac检测按钮

tail -f 失效的情况分析_匹配到二进制文件 tail -f 不打印了-程序员宅基地

文章浏览阅读2.4k次,点赞3次,收藏2次。1.1 tail -f失效情况的重现我们使用tail -f tmp.test对tmp.test文件进行动态追踪,输出如下:然后我们再开一个新的shell终端,然后用vim打开tmp.test并将文件内容修改为:保存退出后,我们再切换回原来的终端,发现tail命令失效,并没有输出新的内容"hello2":发生上述情况的原因是:vim是将原来的文件删除后,然后再生成一个新的..._匹配到二进制文件 tail -f 不打印了

CPU中的主要寄存器_操作数寄存器-程序员宅基地

文章浏览阅读2.9w次,点赞33次,收藏107次。在CPU中至少要有六类寄存器:指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)。这些寄存器用来暂存一个计算机字,其数目可以根据需要进行扩充。1. 数据寄存器数据寄存器(Data Register,DR)又称数据缓冲寄存器,其主要功能是作为CPU和主存、外设之间信息传输的中转站,用以弥补CPU和主存、外设之间操作速..._操作数寄存器

Cool!15个超炫的 CSS3 文本特效【上篇】-程序员宅基地

文章浏览阅读247次。  每一个网页设计师都希望创建出让用户能够赏识的网站。当然,这是不可能满足每个人的口味的。幸运的是,我们有最强大的工具和资源。实际上,我们非常多的网站模板,框架,内容管理系统,先进的工具和其他的资源可..._css3 文本特效

【树莓派】双网卡添加多路由静态路由持久化的问题处理-程序员宅基地

文章浏览阅读872次。在实际现场遇到这样一个问题,双网卡添加多路由静态路由持久化的问题,后来经过尝试,最终使用一种比较挫的办法解决了,但我认为只是一个临时解决方案,这里暂时补录于下,下次再出现问题用于回朔。一.问题:客户现场的网络有一定限制,外网网段为:192.168.0.*网段,内网为 192.168.12.*网段,但内网需要和另外两台机器(192.168.104.19..._route add -net 持久化

【FLASH实例1000教程】(4)上-程序员宅基地

文章浏览阅读3.6k次。【FLASH实例1000教程】(4)上 2011年05月05日  ■经验技巧▲Top(上) 去除Flash动画在线播放限制从中国漫画到动画:《梦里人》的动画进程 Flash中如何通过按钮在本地打开视频 去掉Flash Player 8中烦人的安全设置窗口 中国地产互动网站全FLASH 设计策划案例 对于TREE组件的一点整理 一个FLASH小游戏的制作过程与心得 容易忽略的预载 ..._flash实例教程1000例

随便推点

Unity3D 2dtoolkit 物理游戏开发_unity3d 2d toolkit-程序员宅基地

文章浏览阅读2.8k次。Unity3D这个游戏引擎写得很不错,Asset Store里面卖的插件有些也是相当不错,游戏开发起来越来越便捷了。2dtoolkit 是里面专门做2d游戏的插件,说做游戏,可能有点绝对,它的的ui系统貌似不错,在3d引擎上做2d游戏,在游戏渲染方面不用说肯定很好,话不多说,介绍一下今天的学习笔记吧,就是用2dtoolkit开发物理游戏。我所说物理游戏,只是一个小入门,就是_unity3d 2d toolkit

Java代码:调用外部接口(使用Json格式传递参数)的方法_java调用接口传递参数-程序员宅基地

文章浏览阅读9.2k次,点赞3次,收藏9次。Java代码:调用外部接口(使用Json格式传递参数)的方法 https://blog.csdn.net/guoshijie8023/article/details/81634278代码如下: String url="所给外部接口的url"; //创建连接对象 HttpClient httpClient = new HttpClient..._java调用接口传递参数

linux 下exfat分区,exFAT 文件系统指南-程序员宅基地

文章浏览阅读4.1k次。国庆假期,我拍了一些手机视频,打算存到新买的移动硬盘。然后,就傻眼了。我的 Mac 电脑无法写入移动硬盘,因为移动硬盘的默认文件系统是 NTFS,Mac 不支持写入 NTFS。虽然可以买一个软件解决这个问题,但是我不想为这种功能付钱。经过一番研究,我发现把移动硬盘的文件系统改成 exFAT,就可以解决问题,Mac 原生支持读写 exFAT。由于这个问题很普遍,下面我就来写一写跟 exFAT 相关的..._exfat linux

CPU内存磁盘IO过高问题处理_cpuio等待超过10%-程序员宅基地

文章浏览阅读7.9k次,点赞9次,收藏34次。CPU占用过高分析可以用top命令查看哪一个进程占用cpu高 或者哪一个占用内存大top - 13:55:32 up 59 days, 19:18, 2 users, load average: 0.00, 0.04, 0.09Tasks: 161 total, 1 running, 160 sleeping, 0 stopped, 0 zombie%Cpu(s): ..._cpuio等待超过10%

aix 查看占用内存高的进程-程序员宅基地

文章浏览阅读3.1k次。1,从大到小排列10个内存使用率进程psaux|head-1;psaux|sort-rn+3|head-10如详细查看进程:ps-ealf|head-1;ps-ealf|sort-rn+9|head-10#psaux|head-1;psaux|sort-rn+3|head-10USER..._aix消耗内存脚本

linux 停止tomcat报错,Linux启动tomcat报错-程序员宅基地

文章浏览阅读490次。首先描述一下操作:Linux安装了tomcat9 和 jdk1.8.0_231,测试安装没毛病。2.单独启动tomcat可以成功访问3.将一个简单项目打成war包,在本地(Windows系统)tomcat运行没问题,放Linux服务的tomcat里启动报错以下是报错信息:SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found ..._linux tomcat9 启动报错

推荐文章

热门文章

相关标签