Json数据报文解析-Gson库-JsonObject类-JsonParse类-JsonArray类

一、前言

        本文我们将介绍如何解析Json数据,主要通过Gson库中的相关类来实现。

二、详细步骤

        首先,我们要拿到一个基础的Json数据,这里将以下面的Json数据作为示例:

{
    "code":"1",
    "msg":"ok",
    "data":{
        "status":"run",
        "runtime":36600
    }
}

        解析Json数据,我们要先创建JsonParser对象,然后执行该对象的parse方法,并将返回值赋给JsonObject对象。

        此时jsonobject即是json解析后的对象,我们可以通过get函数获取到文本型的值,比如获取code值。

        当然,我们也可以将获取到的值转换成int等类型返回,如下图所示。

        若要获取类如上述json字符串中的data的jsonobject,则需要用getAsJsonObject()函数进行转换。

        转换后,取值方法和上一个相同。

        对于如下所示的json文本格式,我们需要用JsonArray来解析出JsonObject.

{
    "data":[
        {
            "code":0,
            "status":"run"
        },
        {    
            "code":1,
            "status":"wait"
        }
    ]
}

        先按照上述方法解析出JsonObject对象,然后调用该对象的getAsJsonArray()方法返回JsonArray对象,然后调用JsonArray对象的get(int index).toString()方法,将嵌套在里边的Json文本取出,再按正常步骤解析即可。

        本文所用代码如下:


import com.google.gson.*;

public class Main {

    public static void main(String[] args) {
        String json="{\n" +
                "    \"code\":\"1\",\n" +
                "    \"msg\":\"ok\",\n" +
                "    \"data\":{\n" +
                "        \"status\":\"run\",\n" +
                "        \"runtime\":36600\n" +
                "    }\n" +
                "}";

        JsonParser jsonParser=new JsonParser();
        JsonObject jsonObject= (JsonObject) jsonParser.parse(json);
        //解析第一层的json数据
        System.out.printf(jsonObject.get("code").toString());
        System.out.println(jsonObject.get("code").getAsInt());

        //获取第二层的JsonObject
        jsonObject=jsonObject.getAsJsonObject("data");

        //解析第二层的数据
        System.out.println(jsonObject.get("status"));

        String data2="{\n" +
                "    \"data\":[\n" +
                "        {\n" +
                "            \"code\":0,\n" +
                "            \"status\":\"run\"\n" +
                "        },\n" +
                "        {    \n" +
                "            \"code\":1,\n" +
                "            \"status\":\"wait\"\n" +
                "        }\n" +
                "    ]\n" +
                "}";

        JsonParser jsonParser2=new JsonParser();
        JsonObject jsonObject2= (JsonObject) jsonParser2.parse(data2);
        JsonArray jsonArray=jsonObject2.getAsJsonArray("data");

        jsonObject2= (JsonObject) jsonParser2.parse(jsonArray.get(1).toString());
        System.out.printf(jsonObject2.get("status").getAsString());
    }
}

        全部代码执行结果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

***Cpolar配置外网访问和Dashy

Dashy是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。一款功能超强大,颜值爆表的可定制专属导航页工具 结合cpolar内网工具,我们实现无需部署到公网服务器…

大数据机器学习与深度学习——回归模型评估

大数据机器学习与深度学习——回归模型评估 回归模型的性能的评价指标主要有:MAE(平均绝对误差)、MSE(平均平方误差)、RMSE(平方根误差)、R2_score。但是当量纲不同时,RMSE、MAE、MSE难以衡量模型效果好坏,这就需要用到R2_score。 平均绝对…

redis-学习笔记(Jedis 通用命令)

flushAll 清空全部的数据库数据 jedis.flushAll();set & get set 命令 get 命令 运行结果展示 exists 判断该 key 值是否存在 当 redis 中存在该键值对时, 返回 true 如果键值对不存在, 返回 false keys 获取所有的 key 值 参数是模式匹配 *代表匹配任意个字符 _代表匹配一…

2 接口测试实战演示

上一篇:1 接口测试介绍-CSDN博客 拿到开发提供的接口文档后,结合需求文档开始做接口测试用例设计,下面用最常见也最简单的注册功能介绍整个流程。 说明:以演示接口测试流程为主,不对演示功能做详细的测试,…

Jenkins离线安装部署教程简记

前言 在上一篇文章基于Gitee实现Jenkins自动化部署SpringBoot项目中,我们了解了如何完成基于Jenkins实现自动化部署。 对于某些公司服务器来说,是不可以连接外网的,所以笔者专门整理了一篇文章总结一下,如何基于内网直接部署Jen…

TDengine Kafka Connector将 Kafka 中指定 topic 的数据(批量或实时)同步到 TDengine

教程放在这里:TDengine Java Connector,官方文档已经写的很清晰了,不再赘述。 这里记录一下踩坑: 1.报错 java.lang.UnsatisfiedLinkError: no taos in java.library.pathat java.lang.ClassLoader.loadLibrary(ClassLoader.j…

SE考研真题总结(三)

继续更新,今天准备连出两期该系列~ SE考研真题总结(二)https://blog.csdn.net/jsl123x/article/details/134857052?spm1001.2014.3001.5501 目录 一.简答题 二.代码大题 一.简答题 1.工程和科学的区别 科学是关于事物的基本原理和事实的…

102基于matlab的PCA+ELM和PCA+PSO-ELM的费用估计

基于matlab的PCAELM和PCAPSO-ELM的费用估计,输出输出两者的预测误差并进行比较,输出优化后的迭代曲线。数据可更换自己的,程序已调通,可直接运行。 102matlab PCAPSOELM (xiaohongshu.com)

第16章 网络io与io多路复用select/pool/epool

第16.1节 写一个服务端代码 服务端代码 #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h>#include <fcntl.h>int main() {//openint sockfd sock…

大数据技术之Storm的安装与配置

大数据技术之Storm的安装与配置 这篇文章深入研究了大数据技术中实时计算系统 Apache Storm 的安装与配置过程。首先&#xff0c;文章介绍了 Apache Storm 在大数据处理中的重要性&#xff0c;强调其在实时数据处理领域的关键作用。随后&#xff0c;详细阐述了如何在系统中进行…

掌握Web、DNS、FTP、DHCP服务器的配置。掌握简单网络方案的规划和设计

1、Web服务器配置 2、综合设计 配置完后,所有的终端主机都要能够访问外网服务器,并进行测试。(本题可以自行选题,自行设计,但必须包含路由器、服务器(web、dns、DHCP、)、交换机及防火墙)。 3.做好规划并搭建拓扑图: 4.给PC机与服务器配置好IP,网关 5.给每个交换机…

【Spring】02 Bean 的命名

文章目录 1. 定义2. 使用优势3. 如何命名4. 注解驱动5. 最佳实践1&#xff09;使用明确的业务名词2&#xff09;避免缩写和首字母缩略词2&#xff09;不要过度使用别名 结语 在 Spring 框架中&#xff0c;Bean 是应用程序中的主要组件&#xff0c;负责承载和管理应用的核心功能…

bugku -- eval

<?phpinclude "flag.php";$a $_REQUEST[hello];eval( "var_dump($a);");show_source(__FILE__); ?> //这段代码包含了一个PHP脚本。首先&#xff0c;它包含了一个名为"flag.php"的文件。然后&#xff0c;它定义了一个变量$a&#xff0c…

SpringBootWeb入门、HTTP协议、Web服务器-Tomcat

目录 一、SpringBootWeb入门 二、HTTP协议 HTTP-请求协议 HTTP-响应协议 HTTP-协议解析 三、Web服务器-Tomcat 服务器概述 Tomcat 一、SpringBootWeb入门 直接基于SpringFramework进行开发&#xff0c;存在两个问题&#xff1a;配置繁琐、入门难度大 通过springboot就…

MATLAB读写txt文件数据与进制转换

文章目录 前言读txt文件读txt中的十进制数据到MATLAB读txt数据的其他进制数据转为十进制到MATLAB读txt内容到MATLAB 写txt文件总:将MATLAB生成的10进制数据转换成十进制和radix进制写入txt分:将MATLAB中十进制数据以radix进制数据格式写入txt文件分:将MATLAB中十进制数据写入tx…

gRPC-Gateway:高效转换 RESTful 接口 | 开源日报 No.105

grpc-ecosystem/grpc-gateway Stars: 16.4k License: BSD-3-Clause gRPC-Gateway 是一个遵循 gRPC HTTP 规范的 gRPC 到 JSON 代理生成器。它是 Google 协议缓冲编译器 protoc 的插件&#xff0c;可以读取 protobuf 服务定义并生成反向代理服务器&#xff0c;将 RESTful HTTP…

linux下配置vscode中的ros的c++调试

第一步 这块是launch.json {"version": "0.2.0","configurations": [{"name": "g - 生成和调试活动文件","type": "cppdbg","request": "launch","program": "${wo…

Facebook运营技巧详解,Facebook多店铺如何运营?

在前不久的文章中就讲过Facebook养号和广告的投放技巧&#xff0c;今天东哥就趁热打铁来接着讲讲Facebook的运营技巧&#xff0c;现在做外贸和跨境电商的人基本上都用过Facebook&#xff0c;像在流量这么庞大的平台上想要抓住更多机遇&#xff0c;懂得一些运营技巧是必不可少的…

解决前端VUE前端框架报错Error: error:0308010C:digital envelope routines::unsupported的几种方法

一、报错信息&#xff1a; Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:67:19)at Object.createHash (node:crypto:135:10)at module.exports (E:\Projects\platform-code\platform-cloud\ruoyi-ui\node_modules\we…

鸿蒙开发之页面与组件生命周期

一、页面间的跳转 创建文件的时候记得选择创建page文件&#xff0c;这样就可以在main->resources->profile->main_pages.json中自动形成页面对应的路由了。如果创建的时候你选择了ArkTS文件&#xff0c;那么需要手动修改main_pages.json文件中&#xff0c;添加相应的…