Android开发之Gson解析Json嵌套数据

Android-第十二节JSON解析第三方框架Gson /通过key来获取结果Log.i(“Main”,"解析之后的数据 name: "+name+"age: "+age+"sex: "+sex);3.2Gson解析JSON对象嵌套案例2:json数据:{“age”:20,“name”:“耀阳”,“address”:“province”:“湖南省”,“city”:“长沙市”1.创建对应的实例类:核心代码://json数据:{//“name”:“耀阳”,//“province”:“湖南省”,//“city”:“长沙市” 阅读详情
AI摘要

本文介绍如何使用Gson库解析复杂的JSON数据,并通过定义相应的JavaBean来简化解析过程。详细展示了如何定义嵌套类以匹配JSON字段,并提供了一个实际例子来说明解析流程。

Gson解析复杂的json数据

          在这里介绍解析json数据的另外一种方法就是通过Gson解析,对于解析比较简单的json数据我就不介绍了来一个比较复杂一点的json数据,如下面我们要解析的一个json数据:

[java]  view plain copy
  1. String json = {"a":"100","b":[{"b1":"b_value1","b2":"b_value2"}, {"b1":"b_value1","b2":"b_value2"}],"c": {"c1":"c_value1","c2":"c_value2"}}  

如果使用JsonObject和JsonArray的配合起来使用也是可以解析的但是解析起来就比较麻烦了,如果使用Gson解析就比较简单了,首先我们需要定义一个序列化的Bean,这里采用内部类的形式,这样比较容易看得清晰些

首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些:
               

[java]  view plain copy
  1. public class JsonBean {  
  2.                          public String a;  
  3.                          public List<B> b;  
  4.                          public C c;  
  5.   
  6.                          public static class B {  
  7.   
  8.                                       public String b1;  
  9.   
  10.                                   public String b2;  
  11.                         }  
  12.       
  13.                         public static class C {  
  14.                                  public String c1;  
  15.                                  public String c2;  
  16.                        }  
  17.               }  



             很多时候大家都是不知道这个Bean是该怎么定义,这里面需要注意几点:
             1、内部嵌套的类必须是static的,要不然解析会出错;
             2、类里面的属性名必须跟Json字段里面的Key是一模一样的;
             3、内部嵌套的用[]括起来的部分是一个List,所以定义为 public List<B> b,而只用{}嵌套的就定义为 public C c,
                  具体的大家对照Json字符串看看就明白了,不明白的我们可以互相交流,本人也是开发新手!
 

[java]  view plain copy
  1.  Gson gson = new Gson();  
  2. java.lang.reflect.Type type = new TypeToken<JsonBean>() {}.getType();  
  3. JsonBean jsonBean = gson.fromJson(json, type);  


       然后想拿数据就很简单啦,直接在jsonBean里面取就可以了!
       如果需要解析的Json嵌套了很多层,同样可以可以定义一个嵌套很多层内部类的Bean,需要细心的对照Json字段来定义哦。

       下面我将以一个具体的列子来说明通过Gson方式解析复杂的json数据
1.将要解析的数据如下面的格式

{
    "error": 0,
    "status": "success",
    "date": "2014-05-10",
    "results": [
        {
            "currentCity": "南京",
            "weather_data": [
                {
                    "date": "周六(今天, 实时:19℃)",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/dayu.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/dayu.png",
                    "weather": "大雨",
                    "wind": "东南风5-6级",
                    "temperature": "18℃"
                },
                {
                    "date": "周日",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/zhenyu.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/duoyun.png",
                    "weather": "阵雨转多云",
                    "wind": "西北风4-5级",
                    "temperature": "21 ~ 14℃"
                }
            ]
        }
    ]
}
2.必须定义如下一些的javaBean数据
Status.java
[java]  view plain copy
  1. public class Status   
  2. {  
  3.         private String error;  
  4.         private String status;  
  5.         private String date;  
  6.         private List<Results> results;  
  7.         public String getError()   
  8.         {  
  9.             return error;  
  10.         }  
  11.         public void setError(String error)   
  12.         {  
  13.             this.error = error;  
  14.         }  
  15.           
  16.         public String getStatus()   
  17.         {  
  18.             return status;  
  19.         }  
  20.         public void setStatus(String status)   
  21.         {  
  22.             this.status = status;  
  23.         }  
  24.         public String getDate()   
  25.         {  
  26.             return date;  
  27.         }  
  28.         public void setDate(String date)   
  29.         {  
  30.             this.date = date;  
  31.         }  
  32.         public List<Results> getResults()   
  33.         {  
  34.             return results;  
  35.         }  
  36.         public void setResults(List<Results> results)   
  37.         {  
  38.             this.results = results;  
  39.         }  
  40.         @Override  
  41.         public String toString()   
  42.         {  
  43.             return "Status [error=" + error + ", status=" + status  
  44.                     + ", date=" + date + ", results=" + results + "]";  
  45.         }  
Results.java
[java]  view plain copy
  1. public class Results   
  2. {     
  3.     private String currentCity;  
  4.     private List<Weather> weather_data;  
  5.     public String getCurrentCity()   
  6.     {  
  7.         return currentCity;  
  8.     }  
  9.     public void setCurrentCity(String currentCity)   
  10.     {  
  11.         this.currentCity = currentCity;  
  12.     }  
  13.     public List<Weather> getWeather_data()   
  14.     {  
  15.         return weather_data;  
  16.     }  
  17.     public void setWeather_data(List<Weather> weather_data)   
  18.     {  
  19.         this.weather_data = weather_data;  
  20.     }  
  21.     @Override  
  22.     public String toString()   
  23.     {  
  24.         return "Results [currentCity=" + currentCity + ", weather_data="  
  25.                 + weather_data + "]";  
  26.     }  

Weather.java
[java]  view plain copy
  1. public class Weather {  
  2.     private String date;  
  3.                 private String dayPictureUrl;  
  4.                 private String nightPictureUrl;  
  5.                 private String weather;  
  6.                 private String wind;  
  7.                 private String temperature;  
  8.                 public String getDate() {  
  9.                     return date;  
  10.                 }  
  11.                 public void setDate(String date) {  
  12.                     this.date = date;  
  13.                 }  
  14.                 public String getDayPictureUrl() {  
  15.                     return dayPictureUrl;  
  16.                 }  
  17.                 public void setDayPictureUrl(String dayPictureUrl) {  
  18.                     this.dayPictureUrl = dayPictureUrl;  
  19.                 }  
  20.                 public String getNightPictureUrl() {  
  21.                     return nightPictureUrl;  
  22.                 }  
  23.                 public void setNightPictureUrl(String nightPictureUrl) {  
  24.                     this.nightPictureUrl = nightPictureUrl;  
  25.                 }  
  26.                 public String getWeather() {  
  27.                     return weather;  
  28.                 }  
  29.                 public void setWeather(String weather) {  
  30.                     this.weather = weather;  
  31.                 }  
  32.                 public String getWind() {  
  33.                     return wind;  
  34.                 }  
  35.                 public void setWind(String wind) {  
  36.                     this.wind = wind;  
  37.                 }  
  38.                 public String getTemperature() {  
  39.                     return temperature;  
  40.                 }  
  41.                 public void setTemperature(String temperature) {  
  42.                     this.temperature = temperature;  
  43.                 }  
  44.                 @Override  
  45.                 public String toString() {  
  46.                     return "Weather [date=" + date + ", dayPictureUrl="  
  47.                             + dayPictureUrl + ", nightPictureUrl="  
  48.                             + nightPictureUrl + ", weather=" + weather  
  49.                             + ", wind=" + wind + ", temperature=" + temperature  
  50.                             + "]";  
  51.                 }   
  52.                 
然后具体的javabean定义好了就将解析数据了,下面就是我的解析数据类
[java]  view plain copy
  1. public class MainActivity extends Activity   
  2. {  
  3.     private Button tojson;    
  4.     RequestQueue mQueue;      
  5.     StringRequest stringRequest;      
  6.     Gson gson;  
  7.     String str;  
  8.   
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState)   
  11.     {  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.activity_main);  
  14.           
  15.         tojson = (Button)findViewById(R.id.tojson);  
  16.         gson = new Gson();  
  17.   
  18.     mQueue = Volley.newRequestQueue(MainActivity.this);   
  19.          //http://10.19.20.12/upgrade/test.txt是测试使用的json数据  
  20.         stringRequest = new StringRequest("http://10.19.20.12/upgrade/test.txt",  
  21.                 new Response.Listener<String>()   
  22.                 {  
  23.                     @Override  
  24.                     public void onResponse(String response)   
  25.                     {  
  26.                         Log.d("TAG", response);  
  27.                         System.out.println("response="+response);  
  28.                         Status status = gson.fromJson(response, Status.class);  
  29.                         System.out.println("status="+status);  
  30.                         System.out.println("-------------------------------------");  
  31.                         List<Results> result = status.getResults();  
  32.                         System.out.println("result="+result);  
  33.                           
  34.                     }  
  35.                 },   
  36.                 new Response.ErrorListener()   
  37.                 {  
  38.                     @Override  
  39.                     public void onErrorResponse(VolleyError error)   
  40.                     {  
  41.                         Log.e("TAG", error.getMessage(), error);  
  42.                     }  
  43.   
  44.                 });  
  45.     
  46.         tojson.setOnClickListener(new OnClickListener()   
  47.         {         
  48.             @Override  
  49.             public void onClick(View v)   
  50.             {  
  51.                 mQueue.add(stringRequest);  
  52.             }  
  53.         });       
  54.     }  
  55.   
  56.       
  57.    
  58. }  
  59.     </span>  
其中上面的RequestQueue是开源网络库Volley的使用,如果你对该库的使用还不熟悉的话可以参考http://blog.youkuaiyun.com/guolin_blog/article/details/17482095,该作者对Volley库的使用讲解得非常的细致和深入
大家可以仔细的去拜读。
转载:
http://blog.youkuaiyun.com/tkwxty/article/details/34474501
无线图像传输新突破:深度JSCC算法在低带宽环境下的性能实测 本文深入探讨了基于深度学习的信源信道联合编码(JSCC)算法在低带宽无线图像传输中的突破性表现。通过实测数据对比,深度JSCC在低信噪比环境下展现出卓越的鲁棒性,有效对抗传统方案的“悬崖效应”,实现图像质量的平滑下降,为远程医疗、工业巡检等严苛场景提供了新的解决方案。 阅读详情

相关推荐

从零构建:如何用MATLAB工具箱打造你的第一个多体动力学仿真模型

本文详细介绍了如何使用MATLAB的Simscape Multibody工具箱从零开始构建多体动力学仿真模型,特别适合初学者学习倒立摆系统的建模与仿真。文章涵盖环境准备、坐标系设置、物理模型构建、参数化建模及性能优化等关键步骤,帮助工程师快速掌握这一强大的仿真工具。

water的专栏 964

Gson解析多层嵌套json数据

Gson的好处(对于我目前的项目而言):1, 能自动解析null,不需要像Json解析一样遇到null值报错(也可以判断解决,但是每一句都得加. isNull()? null : value)2,可以从网络流读入,然后解析,写入文件,写入数据库注意:1,这里用F盘的jsontest.json文件作为演示,使用IDEA2,需要懂@Data注解的意思3,需要导入Gson依赖 一,准备3个文件1,json文件:F:\jsontest.json (json文件内容是其他地方抄过来的) 2,实体类 3,解

weixin_56129178的博客 2919

保姆级避坑指南:用Docker在Ubuntu 22.04上部署Isaac Sim 5.1.0,搞定宇树G1仿真环境

本文提供了一份详细的保姆级避坑指南,帮助用户在Ubuntu 22.04上通过Docker部署Isaac Sim 5.1.0,并成功搭建宇树G1仿真环境。文章涵盖了环境准备、Docker与NVIDIA容器工具包的配置、Isaac Sim镜像的定制化拉取与配置,以及宇树G1仿真环境的实战调试,旨在帮助开发者高效解决部署过程中的常见问题。

weixin_33728268的博客 207

使用Gson解析复杂的泛型嵌套泛型数据结构

Gson是由Google自家出来的Json解析库,使用起来兼容性方面当然会有很多优势,而且解析Json数据也很方便,掌握了Gson的一些基本使用之后就可以使用它解析很多复杂的Json数据了。但当我们要解析一个复杂的数据结构时,比如说List<CardBean<E>>这种,泛型之中还有泛型的数组结构,就比较麻烦了。下面我会给出一种方案,在此之前我还是先简单的介绍一下Gson的一些东西,如果

HOURGLASS 5216

scrapy - 美团民宿 实战练习

目录结构 items.py import scrapy # 民俗名称,地区,价格,房间类型及数量,床的数量,可住几人 class MeituanItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() title = scrapy.Field() place = scrapy.Field() price = scrapy.F...

小刘的博客 2665

手把手教你用DCA1000和mmWave Studio 2.0采集AWR1843雷达数据(附驱动安装与常见报错排查)

本文详细介绍了使用DCA1000和mmWave Studio 2.0采集AWR1843毫米波雷达数据的全流程指南,包括硬件连接、驱动安装、软件配置及常见报错排查。通过实战经验分享,帮助开发者快速掌握数据采集技巧,优化雷达参数配置,提升数据质量与采集效率。

weixin_30070339的博客 332

运用Gson解析Json的方法步骤(包括对数组以及多层嵌套的处理)

运用Gson解析Json的方法步骤: 先对应网页上的内容创建实体类,创建实体类的方法: 如果是同一级的,则只需要将其声明便可过程中可用@SerializedName来将网页中的字符与自己创建的字符对应起来 public class Forecast { public String date; @SerializedName("tmp_max") public St...

Panda的学习日常 2182

【matlab】MATLAB 变量详解与应用

在 MATLAB 中,变量可以通过赋值操作进行定义。例如,要定义一个名为xx = 10;在这个例子中,我们创建了一个名为x的变量,并将其赋值为 10。需要注意的是,MATLAB 是一种动态类型语言,因此不需要显式地声明变量的类型。变量名必须以字母开头。变量名可以包含字母、数字和下划线。变量名区分大小写。不要使用 MATLAB 中的关键字(如forif等)作为变量名。

小吴同学的博客 2213

使用Gson解析含有集合、数组嵌套的json数据(反序列化)

一:准备工作 Gson包 下面有使用到了logging日志导入下面几个库包 二:json数据 要获取的是地震等级、位置、时间、url四个信息,通过下面的json格式可以知道这四个属性都属于properties这个对象,而properties又包含在features这个数组同时这个数组又是最外层对象的一个属性。 { "type": "FeatureCollection", "me...

z_x_c_的博客 3857

一步步教你离线安装vsftpd并配置FTP服务

在安装vsftpd之前,需确保系统更新至最新版本,并检查防火墙配置以允许FTP流量。安装过程涉及使用包管理器(如apt-get或yum)下载vsftpd及其依赖包,特别是在离线环境中,需先下载所有相关包并传输到目标机器。安装完成后,通过命令验证安装并启动服务。配置vsftpd包括编辑配置文件以设置访问权限和安全性参数,如匿名访问和本地用户访问。此外,需配置防火墙开放FTP端口,并通过FTP客户端测试服务。最后,建议进行安全配置,如禁用匿名访问和配置SSL/TLS加密,并设置日志记录以监控服务状态。

a_join的博客 2486

gesp c++ 五级知识点

gesp c++ 五级知识点

MMD.然大大 2009

android解析多重嵌套json数据

android解析多重嵌套json数据android端获取的数据如下: JAVA代码获取json数组里的某个值 String articleID; String username; String address; String avatar; String title; String image; String content; St

最高永远来自最下 3829

大尺寸智能车的CAN驱动控制器制作(一)

本驱动板使用8个半H桥BTS7960驱动,使用CAN接口于车体主控制器通讯,最大承受电压48V 电流20A ,主控为STM32F103VET6,电机控制频率为18KHz,CAN通讯芯片为TJA1042T,全驱动板6-24V宽电压供电,采用24V降5V,5V降3.3V的方案供电,其中经过AMS1117作为降压芯片,可以有效降低主控损毁几率。在这里可以看到555电机相比于其他电机的功率大很多,所以需要大功率的电机驱动,在以往的电机驱动选型中选择了TB6612,L298N等小功率电机驱动。

技术的力量能够改变世界 569

Android 开发必备之json解析Gson篇

概述在了解gson前,你需要了解json。 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSON 具有自我描述性,更易理解 JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON库

简国堂的博客 1906

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android gson解析例子,Android:用Gson解析数据

说明首次发布2019年01月30日最近更新2019年02月18日@SerializedName()有时候,后台返回数据的命名不是特别友好,为了方便我们自己的开发,就需要将其给的字段做个映射。那么,这时候我们就用到了@SerializedName()。需要导入的包:import com.google.gson.annotations.SerializedName;// Modelimport com...

weixin_31578739的博客 656

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

在Android开发中解析JSON:从基础到高级技巧

在Android开发中,解析JSON是一个常见的需求。通过使用`org.json`库、`Gson`库、`Moshi`库或`Jackson`库,开发者可以轻松地解析和操作JSON数据。对于复杂的数据结构,可以通过嵌套解析、动态字段处理和类型安全的解析来优化性能。希望本文能帮助你在Android开发中更高效地处理JSON数据。

Myqijiahai的博客 1305

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

一篇文章让你学会json和Gson---json全面详细解析

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人。

2401_85729264的博客 1332

Gson解析json数据的案例一

转自:http://blog.youkuaiyun.com/l331258747/article/details/51547338; Android利用Gson解析嵌套多层的Json 首先先讲一个比较简单点的例子(最简单的我就不讲啦,网上很多),帮助新手理解Gson的使用方法:比如我们要解析一个下面这种的Json:String json = {"a":"100","b":[{"b1":"b_va...

bangheng4869的博客 86

利用gson解析和生成json数据(一)

在android开发中经常需要操作json数据,利用谷歌提供的gson

mockingbirds的专栏 2231

Json解析框架之Gson详解

好东西,大家享 原文来自:http://www.iamxiarui.com/2016/08/30/android 原文作者:iamxiarui 1、简单的JSON数据进行解析 [ { "name": "zhangsan", "age": "10", "phone": "11111...

weixin_33978016的博客 172

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

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

物联网领域菜鸟~嘻嘻 1699

Android中Gson使用,Android基础入门教程

分享一份工作1到5年以上的Android程序员架构进阶学习路线体系,希望能对那些还在从事Android开发却还不知道如何去提升自己的,还处于迷茫的朋友!阿里P7级Android架构师技术脑图;查漏补缺,体系化深入学习提升(详细点击我的GitHub领取)**全套体系化高级架构视频;**七大主流技术模块,视频+源码+笔记。

m0_60388338的博客 751

Android开发之解析树形json数据

树形json数据不同于一般的json数据,其大多有多层嵌套。如果用Android Studio中的GsonFormat或者其他工具往往不能正确生成数据格式。//树形结构[ { "name": "a", "size": "4", "Rate": "4", "level": "3",

Erichthonius8的博客 1863

[未完]Gson处理json资源帖

对Json进行处理的Google Gson API教程 http://www.importnew.com/14509.htmlhttp://www.cnblogs.com/shaocm/p/3643365.html Android笔记:gson处理多层嵌套的复杂形式的json

穹顶之下 588

Android开发入门:使用Moshi库高效解析JSON数据

Moshi最优雅的特性是通过@JsonClass注意@Json注解可以处理JSON字段名与Kotlin属性名的映射。@ToJson@FromJson// 注册自定义适配器.build()基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。

2600_94959798的博客 677
上一篇: Android开发之SearchView
下一篇: Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值