解析JSON格式数据

news2024/9/27 15:33:14

解析JSON格式数据

比起XML,JSON的体积更小,语义性更差
传入的JSON文件如下
在这里插入图片描述

使用JSONObject

private fun parseJSONWithJSONObject(jsonData: String) {  
    try {  
        val jsonArray = JSONArray(jsonData)  
        for (i in 0 until jsonArray.length()){  
            val jsonObject = jsonArray.getJSONObject(i)  
            val id = jsonObject.getString("id")  
            val name = jsonObject.getString("name")  
            val version = jsonObject.getString("version")  
            Log.d("MainActivity","id is $id")  
            Log.d("MainActivity","name is $name")  
            Log.d("MainActivity","version is $version")  
        }  
    }catch (e:Exception){  
        e.printStackTrace()  
    }  
}

非常简单,无需多言。
进行一个循环。

使用GSON

还有鼻JSONObject更加简单的,那就是Google提供的GSON,会让你的JSON解析更加简单!

首先添加依赖

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

GSON的强大之处在于可以将一段JSON格式的字符串自动映射成一个对象,而不需要手动进行编写代码。
比如{“name”:“Tom”,“age”:20}
我们就可以定义一个Person类,并且加入nameage两个字段。
然后简单调用即可。

val gson = Gson()
val person = gson.fromJson(jsonData,Person::class.java)

如果是一组JSON数组,会稍微麻烦一点。
比如

[{"name":"Tom","age":20},{"name":"Jack","age":25},{"name":"Lily","age":22}]

这个时候就需要借助TypeToken将期望解析成数据类型传入fromJson()中,如下所示:

val typeOf = object:TypeToken<List<Person>> (){}.type
val person = gson.fromJson<List<Person>>(jsonData,typeOf)

新增一个App类

class App(val id:String, val name:String, val version:String)

实操

创建函数 parseJSONWithGSON,如下

private fun parseJSONWithJGSON(jsonData: String) {  
    val gson = Gson()  
    val typeOf = object : TypeToken<List<App>> (){}.type  
    val appList = gson.fromJson<List<App>>(jsonData,typeOf)  
    for (app in appList)  
    {  
        Log.d("MainActivity","id is ${app.id}")  
        Log.d("MainActivity","name is ${app.name}")  
        Log.d("MainActivity","version is ${app.version}")  
    }  
}

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

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

相关文章

视频去除水印怎么弄?这几个实用方法分享给大家!

在我们观看或分享视频时&#xff0c;可能会遇到一些带有水印的视频。这些水印可能会影响我们的观看体验&#xff0c;或者在我们需要使用这些视频时造成不便。下面&#xff0c;我将为你介绍三种去除视频水印的方法。 方法一&#xff1a;使用记灵在线工具 记灵在线工具是一个非…

Leetcode:684. 冗余连接(并查集C++)

目录 684. 冗余连接 题目描述&#xff1a; 实现代码与解析&#xff1a; 并查集 原理思路&#xff1a; 684. 冗余连接 题目描述&#xff1a; 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的…

Python安装解释器

文章目录 一、下载Python解释器二. Linux环境的安装三. pycharm创建项目四、验证安装是否成功 一、下载Python解释器 首先&#xff0c;您需要从官方Python网站&#xff08;https://python.org&#xff09;下载Python解释器。Python的当前稳定版本是3.9.x系列。网站上提供了针对…

Anoym:一种以组合质押策略为特点的 LSD 设施

LSD&#xff08;Liquid Staking Derivatives&#xff09;&#xff0c;即流动性质押衍生品&#xff0c;目前主要包括Lido、Frax等主要项目&#xff0c;它是伴随着ETH 2.0升级成长起来的DeFi衍生品赛道。ETH 2.0 以 POS 为共识机制&#xff0c;节点需要质押 32 ETH 才能参与网络维…

三分钟了解 RocketMQ消息队列

文章目录 基本概念详细介绍主题&#xff08;Topic&#xff09;消息类型&#xff08;MessageType&#xff09;消息队列&#xff08;MessageQueue&#xff09;消息&#xff08;Message&#xff09;消息视图&#xff08;MessageView&#xff09;消息标签&#xff08;MessageTag&am…

【Linux后端服务器开发】Shell外壳

目录 一、Shell外壳概述 二、描述Shell外壳原理的生动例子 三、C语言模拟实现Shell外壳 一、Shell外壳概述 在狭义上 , 我们称Linux操作系统的内核为 Linux 在广义上 , Linux发行版 Linux内核 外壳程序 就比如市面上现在的redhat, centos, ubuntu等等我们耳熟能详的Linux发…

Apache Tomcat 信息泄露漏洞CVE-2023-28708处理

一、漏洞描述 Apache Tomcat软件是Jakarta Servlet、 Jakarta Server Pages、 Jakarta Expression Language、 Jakarta WebSocket、 Jakarta Annotations和 Jakarta Authentication 规范的开源实现 。Apache Tomcat实现了对Servlet和JavaServer Page&#xff08;JSP&#xff09…

C++输出编译器名称和版本以及编译器位数、C/C++常见编译器

使用C输出编译器的名称、版本和位数 #include<iostream>int main() {#ifdef __clang__std::cout << "Compiler: Clang" << std::endl;std::cout << "Version: " << __clang_major__ << "." << __cla…

Anaconda配置可视化绘图库seaborn的方法

本文介绍在Anaconda的环境中&#xff0c;安装Python语言中&#xff0c;常用的一个绘图库seaborn模块的方法。 seaborn模块是基于Matplotlib的数据可视化库&#xff0c;它提供了一种更简单、更漂亮的界面来创建各种统计图形。seaborn模块主要用于数据探索、数据分析和数据可视化…

多线程与并发编程【守护线程、线程同步】(三)-全面详解(学习总结---从入门到深化)

目录 守护线程 什么是守护线程 守护线程的使用 线程同步 实现线程同步 线程同步的使用 守护线程 什么是守护线程 在Java中有两类线程&#xff1a; User Thread(用户线程)&#xff1a;就是应用程序里的自定义线程。 Daemon Thread(守护线程)&#xff1a;比如垃圾回收线程&am…

串口问题案例分享

最近在调试一个新板子的时候&#xff0c;发现一个问题&#xff0c;板子使用的是一个国产的处理器芯片&#xff0c;表现为如果板子232串口的发送和接收与电脑串口连接时&#xff0c;板子可以正常进入系统。 但是如果板子与电脑只接232串口的发送信号&#xff0c;不接232串口的接…

Java入门--字面量

字面量 字面量是指在代码中直接表示特定的常量或值&#xff0c;可以是整数&#xff0c;浮点数&#xff0c;布尔值&#xff0c;字符等 演示 整数和小数 System.out.println(666);//小数System.out.println(99.5);快捷写法&#xff1a;666.sout 加回车 字符 字符必须用单引号…

docker安装es集群(三台)

文章目录 1、防火墙设置&#xff0c;开启所需端口2、创建目录&#xff0c;并更改目录权限3 设置系统参数4 启动5 安装ik分词器6 配置7 安装elasticsearch-head&#xff08;用于访问es&#xff0c;界面化工具&#xff09;8、 修改es中每次返回的数据数量参数&#xff08;默认100…

剑指offer55-II.平衡二叉树

我这个方法比较笨&#xff0c;用的是用的是昨天写的求二叉树深度的方法&#xff0c;先定义dfs求二叉树深度的方法&#xff0c;再定义cur方法&#xff0c;比较左子树和右子树的深度&#xff0c;递归比较每一个子树的左子树和右子树的深度&#xff0c;一旦有一个不平衡就把flag改…

vue3使用Eharts案例

文章目录 安装Eharts代码演示最终效果 安装Eharts 官方快速上手地址 npm install echarts --save代码演示 <script setup> import {onMounted, ref} from "vue"; // import echarts from "echarts"; import * as echarts from echarts; const opt…

聊聊「画图」和工具

经常被问&#xff1a;图怎么画&#xff0c;用啥工具&#xff1f; 01 每次遇到这个问题&#xff0c;脑回路都有一丝丝欢乐的氛围&#xff1b; 并不是问题奇怪&#xff1b; 而是自己对于画图这件事上并不专业&#xff0c;就算是涉及工作上的制图&#xff0c;也没特地去看过任何…

交换机远程登录telnet、SSH、禁止非法用户访问实验

交换机远程登录实验 交换机远程登录实验一、配置Console口登录设备二、配置Telnet远程登录三、Stelnet&#xff08;SSH&#xff09;配置四、远程登录实际中的配置五、禁止非法用户远程登录 交换机远程登录实验 ———————————————————————————————…

解锁数字化转型利器:探秘常用低代码工具大揭秘!

随着数字化转型的深入推进&#xff0c;越来越多的企业开始采用低代码工具来加快应用程序的开发速度。在本文中&#xff0c;我们将介绍常用的低代码工具有哪些&#xff1f;以帮助企业了解并选择适合自己的工具。 1、Zoho Creator Zoho Creator是一款低代码开发平台&#xff0c;提…

Docker配置阿里镜像加速源,超详细

1、首先登入阿里云账号,点击 控制台    2、搜索框查找 容器镜像服务    3、点击 镜像加速器 ,选择对应的操作系统    4、复制加速地址,在系统中配置 默认路径 /etc/docker/daemon.json 5、重启Docker systemctl daemon-reload systemctl restart docker6、验证 当…

【数据结构与算法】力扣:对称二叉树

对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 来源&#xff1a;…