Android中使用GSON包解析JSON数据(复杂JSON)

使用Gson解析两种复杂的json数据 众所周知,我们在做新闻、天气预报等类型的app的时候,经常会碰到需要将获取的json网络数据进行数据解析,以方便我们获取需要的信息并进行封装显示,这时候我们有两种解析方式:原生解析和Gson框架解析;         接下来就这两种解析方式进行一个总结:        一:Gson框架解析 注意:在我们进行实体类封装时,我们需要获取的数据,如果有父类,我们也需要将父类封装起来,不然我们就获取 阅读详情

之前讨论过用GSON解析较为简单的JSON,这次稍微增加一点难度。把JSON弄的复杂一点,使JSON变为2层嵌套,并增加了一些其他元素。代码中把language.json放到assets文件夹下,把GSON.jar放到libs文件夹下。如果用的是Android Studio,需要右键GSON,jar,选择Add As Lirbary,否则AS不能识别。Eclipse中不需要这个步骤。具体解析以下三种类型的JSON:

[java]  view plain  copy
 print ?
  1. "first": "mobile",  
  2. "second": "pc",  

[java]  view plain  copy
 print ?
  1. "app": {  
  2.        "google": "android",  
  3.        "apple": "iOS",  
  4.        "microsoft": "wp"  
  5.    }  

[java]  view plain  copy
 print ?
  1. "language": [  
  2.        {  
  3.            "id": 1,  
  4.            "name": "Java",  
  5.            "ide": "Eclipse"  
  6.        },  
  7.        {  
  8.            "id": 2,  
  9.            "name": "C++",  
  10.            "ide": "Visual Studio"  
  11.        }  
  12.    ]  

languages.json的JSON代码总体如下:

[java]  view plain  copy
 print ?
  1. {  
  2.     "first": "mobile",  
  3.     "second": "pc",  
  4.     "app": {  
  5.         "google": "android",  
  6.         "apple": "iOS",  
  7.         "microsoft": "wp"  
  8.     },  
  9.     "language": [  
  10.         {  
  11.             "id": 1,  
  12.             "name": "Java",  
  13.             "ide": "Eclipse"  
  14.         },  
  15.         {  
  16.             "id": 2,  
  17.             "name": "C++",  
  18.             "ide": "Visual Studio"  
  19.         }  
  20.     ]  
  21. }  

        对于三种不同的类型,分别建立3个类,用于映射JSON中的属性。

Root.java如下:

[java]  view plain  copy
 print ?
  1. public class Root {  
  2.   
  3.     private String first;  
  4.     private String second;  
  5.   
  6.     public void setFirst(String first) {  
  7.         this.first = first;  
  8.     }  
  9.   
  10.     public void setSecond(String second) {  
  11.         this.second = second;  
  12.     }  
  13.   
  14.     public String getFirst() {  
  15.   
  16.         return first;  
  17.     }  
  18.   
  19.     public String getSecond() {  
  20.         return second;  
  21.     }  
  22. }  

App.java如下:

[java]  view plain  copy
 print ?
  1. public class App {  
  2.   
  3.     private String google;  
  4.     private String apple;  
  5.     private String microsoft;  
  6.   
  7.     public void setGoogle(String google) {  
  8.         this.google = google;  
  9.     }  
  10.   
  11.     public void setApple(String apple) {  
  12.         this.apple = apple;  
  13.     }  
  14.   
  15.     public void setMicrosoft(String microsoft) {  
  16.         this.microsoft = microsoft;  
  17.     }  
  18.   
  19.     public String getGoogle() {  
  20.   
  21.         return google;  
  22.     }  
  23.   
  24.     public String getApple() {  
  25.         return apple;  
  26.     }  
  27.   
  28.     public String getMicrosoft() {  
  29.         return microsoft;  
  30.     }  
  31. }  

Language.java如下:

[java]  view plain  copy
 print ?
  1. public class Language {  
  2.   
  3.     private String id;  
  4.     private String name;  
  5.     private String ide;  
  6.   
  7.     public void setId(String id) {  
  8.         this.id = id;  
  9.     }  
  10.   
  11.     public void setName(String name) {  
  12.         this.name = name;  
  13.     }  
  14.   
  15.     public void setIde(String ide) {  
  16.         this.ide = ide;  
  17.     }  
  18.   
  19.     public String getId() {  
  20.   
  21.         return id;  
  22.     }  
  23.   
  24.     public String getName() {  
  25.         return name;  
  26.     }  
  27.   
  28.     public String getIde() {  
  29.         return ide;  
  30.     }  
  31. }  

       以上的三个类体现了GSON解析的面向对象的思想。使用类中的属性来对应JSON中的键,使用类中的get方法来获取JSON中的值。解析的过程如下,直接上代码:

[java]  view plain  copy
 print ?
  1. public class MainActivity extends Activity {  
  2.   
  3.     private TextView text;  
  4.     private String jsonString;  
  5.   
  6.     @Override  
  7.     protected void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.activity_main);  
  10.         text = (TextView) findViewById(R.id.id_text);  
  11.         getJSONString();//从language.json中获得JSON字符串;  
  12.         parseRoot(jsonString);  
  13.         parseApp(jsonString);  
  14.         parseLanguage(jsonString);  
  15.     }  
  16.   
  17.     /** 
  18.      * 从languages.json中读取JSON字符串; 
  19.      */  
  20.     public void getJSONString() {  
  21.         try {  
  22.             InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("languages.json"), "UTF-8");  
  23.             BufferedReader bufferedReader = new BufferedReader(inputStreamReader);//使用BufferReader读取输入流中的数据;  
  24.             String line;  
  25.             StringBuilder stringBuilder = new StringBuilder();//所有读取的json放到StringBuilder中,这里也可以使用StringBuffer,效果一样;  
  26.             while ((line = bufferedReader.readLine()) != null) {  
  27.                 stringBuilder.append(line);  
  28.             }  
  29.             jsonString = stringBuilder.toString();  
  30.             bufferedReader.close();//按相反的顺序关闭流;  
  31.             inputStreamReader.close();  
  32.   
  33.         } catch (IOException e) {  
  34.             e.printStackTrace();  
  35.         }  
  36.     }  
  37.   
  38.     /** 
  39.      * 先解析: 
  40.      * "first": "mobile", 
  41.      * "second": "pc", 
  42.      * 也就是JSON的第一层嵌套; 
  43.      * 
  44.      * @param json 
  45.      */  
  46.     private void parseRoot(String json) {  
  47.         Gson gson = new Gson();  
  48.         Root root = gson.fromJson(json, Root.class);  
  49.         text.append(root.getFirst() + "\n");  
  50.         text.append(root.getSecond() + "\n");  
  51.     }  
  52.   
  53.     /** 
  54.      * 然后解析: 
  55.      * "app": { 
  56.      * "google": "android", 
  57.      * "apple": "iOS", 
  58.      * "microsoft": "wp" 
  59.      * } 
  60.      * 
  61.      * @param json 
  62.      */  
  63.     private void parseApp(String json) {  
  64.   
  65.         try {  
  66.             Gson gson = new Gson();  
  67.             JSONObject roo = new JSONObject(json);  
  68.             App app = gson.fromJson(roo.getString("app"), App.class);  
  69.             text.append(app.getGoogle() + "   " + app.getApple() + "   " + app.getMicrosoft() + "\n");  
  70.         } catch (JSONException e) {  
  71.             e.printStackTrace();  
  72.         }  
  73.     }  
  74.   
  75.     /** 
  76.      * 最后解析:也就是JSON数组。 
  77.      * "language": [ 
  78.      * { 
  79.      * "id": 1, 
  80.      * "name": "Java", 
  81.      * "ide": "Eclipse" 
  82.      * }, 
  83.      * { 
  84.      * "id": 2, 
  85.      * "name": "C++", 
  86.      * "ide": "Visual Studio" 
  87.      * } 
  88.      * ] 
  89.      * 
  90.      * @param json 
  91.      */  
  92.     private void parseLanguage(String json) {  
  93.   
  94.         try {  
  95.             Gson gson = new Gson();  
  96.             Type type = new TypeToken<ArrayList<Language>>() {  
  97.             }.getType();  
  98.             JSONObject roo = new JSONObject(json);  
  99.             ArrayList<Language> languages = gson.fromJson(roo.getString("language"), type);  
  100.   
  101.             for (int i = 0; i < languages.size(); i++) {  
  102.                 Language lan = languages.get(i);  
  103.                 text.append(lan.getId() + "   " + lan.getName() + "   " + lan.getIde() + "\n");  
  104.             }  
  105.         } catch (JSONException e) {  
  106.             e.printStackTrace();  
  107.         }  
  108.     }  
  109.   
  110.   
  111. }  


        程序实现的效果如下:

。

至此,已经成功实现用GSON解析较为复杂的JSON。


附GSON包下载:http://pan.baidu.com/s/1ntuxTRr


github主页:https://github.com/chenyufeng1991  。欢迎大家访问!

Android Gson解析复杂多重数据过程及错误排查 最近在做天气预报的项目,需要用到多重JSON的解析,这里我选用了目前流行的,也公认是最简单易用的框架GSON来解析这个复杂的JSON,虽然在最后结果很简单,但并不意味着整个过程很简单,没有一点问题,恰恰是相反的,我是第一次学习这个GSON,虽然在网上看博客一看即知怎么操作,但是一动手,却发生问题还是有的。      首先,先上我的JSON结构:   {"desc":"OK","status" 阅读详情

相关推荐

GSON在Android JSON解析中的应用与示例

在现代的Android开发过程中,依赖管理工具扮演着非常关键的角色。它们负责从远程仓库下载所需的库文件,并将其集成到项目中去。Gradle和Maven是目前最常用的两个依赖管理工具。Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言来声明项目设置,比传统的XML配置更简洁。Maven是一个项目管理和综合自动化工具。

weixin_33245447的博客 1018

GSON解析复杂的JSON数组

GSON的两个重要方法   在GSON的API中,提供了两个重要的方法:toJson()和fromJson()方法。其中,toJson()方法用来实现将Java对象转换为相应的JSON数据,fromJson()方法则用来实现将JSON数据转换为相应的Java对象。

lianjianyong的博客 9406

Android GSON库使用指南:从基础到高级

在现代应用开发中,数据交换的格式多种多样,而JSON(JavaScript Object Notation)因其轻量级和易于阅读的特点,成为了一种广泛使用的数据交换格式。GSON是Google提供的一个开源库,用于在Java对象和JSON数据之间进行快速转换。GSON不仅简单易用,还支持任意复杂的对象图序列化与反序列化,无需手动编写转换代码。本章将探讨GSON库的基本概念,以及它如何将Java对象转换为JSON格式数据,以及如何从JSON字符串中恢复出Java对象。

weixin_29363791的博客 1950

使用Gson解析复杂的json数据

Gson解析复杂的json数据

IT先森 20万+

自动驾驶入门到进阶完整指南:感知、预测、规划、端到端、仿真测评与场景挖掘全解析

对小白来说,不建议一开始直接冲端到端大模型。先学数据和坐标系:否则所有结果都看不懂。再学 LiDAR 3D 检测:最容易建立空间感。再学 BEV/多相机感知:这是当前主流。再学轨迹预测:理解交互和多模态。再学规划控制:理解车为什么这样开。再学仿真和闭环评测:理解 open-loop 和 closed-loop 差异。最后学端到端/VLM/VLA:这时候你才知道它到底替代了哪些模块。贯穿始终学习场景挖掘和安全测评:这是工业界最核心的能力之一。

u013250861的博客 394

【上海大学计算机组成原理实验报告】一、数据传送实验

将58H写入A寄存器//将6BH写入W寄存器//将C3H写入R1寄存器//将C3H写入R1寄存器//了解实验仪器数据总线的控制方式//掌握数据传送的基本原理//掌握各寄存器的结构、工作原理及其控制方法//数据传送实验

HackerKevon的博客 3510

使用Gson解析Json数据

Gson是Google提供的一个Java库,用于将Java对象转换为JSON格式数据或将JSON格式数据转换为Java对象。方法名功能将对象转换成相应的JSON数据将JSON数据转换成对象。

A125679880的博客 8936

博通PEX89000 PCIe 5.0交换芯片:如何为AI集群构建高效GPU互联架构

本文深入解析了博通PEX89000 PCIe 5.0交换芯片如何为AI集群构建高效的GPU互联架构。该芯片通过提供高带宽、低延迟的PCIe 5.0交换能力,打破传统GPU通信的带宽瓶颈,并支持多主机共享、资源池化及软件定义拓扑,从而显著提升大规模AI训练与推理任务的效率与资源利用率。

weixin_29214559的博客 412

Gson解析JSON

Gson是Google提供的处理JSON数据的Java类库,主要用于转换Java对象和JSON对象。

qq_42847719的博客 6651

10xGenomics Loupe Browser实战指南:从数据导入到细胞注释全流程解析

本文提供了10xGenomics Loupe Browser的实战指南,详细解析了从数据导入到细胞注释的全流程。作为一款强大的可视化工具,Loupe Browser能帮助研究者直观探索单细胞测序数据,通过交互式操作进行细胞选择、差异基因分析和细胞类型注释,是单细胞数据分析入门和结果验证的高效平台。

blue42的博客 453

拯救你的备份数据!STM32F407 RTC Tamper功能防篡改设计指南

本文详细介绍了STM32F407 RTC Tamper功能在物联网数据安全中的应用,包括硬件触发、数据清除和时间戳记录等核心机制。通过实战案例和代码示例,展示了如何构建多层次的防御体系,确保敏感数据在物理入侵时自动擦除并记录精确时间戳,适用于智能门锁、工业传感器等高安全需求场景。

weixin_28278377的博客 279

Android:使用Gson解析复杂的JSON数据

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,目前广泛使用。本文主要讲解android如何解析复杂格式的JSON数据,适合android初学者和初步接触JSON的人。 1.JSON相关介绍: 首先了解一下JSON的相关内容,JSON中的数据是以键值对的形式出现的。例如”name”:”jack”;这就是一个键值对,可以理解为name=jack。JSO...

Abel_Chen_ 292

Win11+Ubuntu18.04+Ubuntu20.04三系统安装与卸载

以下情况均为个人情况:1.插入启动 U 盘后,登录时可以按F12(拯救者Y7000,不同电脑不同)进入BIOS,选择从启动盘启动。2.。3.5.在win基础上,安装第一个Ubuntu系统后,系统启动界面类似如下第一张图,Ubuntu不显示版本号。安装第二个Ubuntu系统后,系统启动界面如下第二张图,如果想更改启动项的名称,可自行查阅相关资料。

weixin_61686291的博客 2540

Gson快速解析JSON字符串

关于GSON的入门级使用,这里就不提了,如有需要可以看这篇博文 《Google Gson的使用方法,实现Json结构的相互转换》 ,写的很好,通俗易懂。 我为什么写这篇文章呢?因为前几晚跟好友 xiasuhuei321 探讨了一下GSON解析复杂的JSON的时候,能不能只解析源数据中的数组,甚至只解析数组的某一部分。探讨了二十分钟,得出结论:没用过,不知道。 所以今天特地研究了一下,发现真的S...

huyawenz的博客 1万+

103:vue+cesium 设置球体水部分颜色为黄色

本示例在 Vue + cesium 项目中设置球体水部分颜色为黄色。这里的操作是将球体内部设置为空的,在地球内部添加一个黄色的圆球,这样水的部分就被突出出来了。直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果.

大剑师兰特的GIS世界 626

RK3588 部署 YOLO26-Pose 人体姿态检测:Windows Docker 环境全流程

YOLO26-Pose 在 RK3588 上的部署流程是 PC 端 ONNX 导出 → RKNN 转换(INT8 量化)→ 板端推理。INT8 量化后 YOLO26s-Pose 约 35ms,YOLO26n-Pose 约 15ms,可以覆盖实时姿态检测的需求。后处理是 Python 实现的常见瓶颈——如果帧率不达标,先用 npy 保存模型输出在 PC 上验证解析逻辑的正确性,确认无误后再迁移到 C++ 实现。

m0_64661770的博客 544

Android利用Gson库解析复杂结构的JSON数据

最近在应用Face++进行人脸识别开发时,经常需要解析Face++返回的结构复杂的JSON数据,于是便决定应用Google开发的Gson库来减轻工作量。首先给大家看一个比较复杂的JSON数据:{"face":[{"attribute":{"age":{"range":5,"value":6},"gender":{"confidence":89.7809,"value":"Male"},"race":

第五空间 2376

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android——Json和Gson分别是什么,以及Json 数据的解析方法

转载自:简书 用户hpp417 写的:Android——Json 数据全解析 前言 在现如今的 Android 开发中,尤其是互联网软件,客户端与服务器端的交互可谓是家常便饭,而在 Android 端,通过访问接口接收到服务器端返回的 Json 格式的数据的情形几乎百分之九十的开发者都会遇到,这篇文章就对一些基本的到复杂的 Json 数据的解析进行一个全面的分析,从实战出发,至少希望你...

m0_37292262的博客 1384

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Android:用GSON 五招之内搞定任何JSON数组

写在前面原文  http://www.iamxiarui.com/2016/08/30/android:用gson-五招之内搞定任何json数组/ 关于GSON的入门级使用,这里就不提了,如有需要可以看这篇博文 《Google Gson的使用方法,实现Json结构的相互转换》 ,写的很好,通俗易懂。 我为什么写这篇文章呢?因为前几晚跟好友 xiasuhuei321

阳光灿烂的日子的博客 9689

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android Gson解析多层嵌套复杂数据

Android Gson解析多层嵌套复杂数据 时间:2014-08-06 19:04:32      阅读:5416      评论:0      收藏:0      [点我收藏+] 标签:android   gson    目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析

kanbujian 5991

使用 Gson 解析 Json

Gson 解析 JSON:你可以使用方法将 JSON 字符串解析为 Java 对象,使用方法将 Java 对象转换为 JSON 字符串。处理嵌套数据:当 JSON 中包含数组或嵌套对象时,你可以使用集合类(如List<T>)或定义嵌套的 Java 类来映射 JSON 数据。泛型类型解析:使用TypeToken来处理带有泛型参数的类型(如List<T>Gson 是一个非常灵活且强大的库,广泛应用于 Android 和 Java 项目中,特别适合进行 JSON 数据与 Java 对象之间的转换。

2402_85226471的博客 1272

Android 使用Gson解析json用法

目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://code.google.com/p/google-gson/ 什么是JSON: JSON即JavaScript Object Natation, 它是一种轻量级

逍遥飞鹤的专栏 2172

Android基础之使用Gson解析json数据 第一弹

Android基础之使用Gson解析json数据 第一弹首先介绍一下JSON数据的格式 JSON数据 JSON对象 实体类对象 {……..} JSONObject Map [……..] JSONArray List * 总结:JSON只有两种格式,一种是大括号,表示一个JSONObject对象,一种是中括号,表示JSONArray数组 数据 解析后的数据类型

老司机-黄 2719

Android用GSon处理Json数据

目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://code.google.com/p/google-gson/ 什么是JSON: JSON即JavaScript Object Natation, 它是一种轻量级

姚佳伟 3422
上一篇: Android中使用GSON包解析JSON数据(简单JSON)
下一篇: Android中使用Volley开源库进行Http网络请求(GET方式)
心态决定状态
博客等级 码龄16年 14粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值