【AndroidDevelop 04】解析JSON数据详解

JSON结构化表示很容易展示信息,并且具备容易在网络上传输的特点,所以在数据交换中十分常用。

首先认识一下JSON数据格式:

js 复制代码
"HeWeather": [
        {
            "basic": {
                "cid": "CN101190401",
                "location": "苏州",
                "parent_city": "苏州",
                "admin_area": "江苏",
                "cnty": "中国",
                "lat": "43.88684082",
                "lon": "125.32450104",
                "tz": "+8.00",
                "city": "苏州",
                "id": "CN101190401",
                "update": {
                    "loc": "2024-04-06 02:36",
                    "utc": "2024-04-06 02:36"
                }
            },
            "status": "ok",
        }]

所示为一个天气预报请求数据的示例。

那么我们得到服务器返回的JSON对象后,该如何使用呢?

  • JSONObject

    这是官方提供的方法,可以将从服务器得到的JSON字符串转换为JSON Object对象,底层原理是Map。也就是说,该方法将合法格式的JSON字符串转换为map实例,所以用法也显而易见。

java 复制代码
    //如果得到的是JSON数组数据jsonData:
    JSONArray jsonArray = new JSONArray
    (jsonData);
    for(int i = 0; i < jsonArray.length();i++){
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    String status = jsonObject.getString("status")
    JSONObject basicObject = new JSONObject(jsonObject.getJSONObject);
    String cid = basicObject.opt("cid");
    }
  • GSON

    来自于google的开源库,比JSONObject用起来更简单。不过GSON没有被添加到Android官方的API中,想要使用,必须先引入依赖。

arduino 复制代码
implementation 'com.google.code.gson:gson:2.8.9'

先来说说为什么用到GSON会更方便,如上图所示,使用JSONObject方法需要不断手动解析对象,实在是麻烦。而GSON提供了将JSON转换为java对象的功能,从而不需要我们手动地去编写代码解析。

java 复制代码
//假设得到的json数据为:
/* {"name" : "YesP", "age":20} 那么我们可以定义一个Person类,加入name和age两个字段*/
Gson gson = new Gson();
Person person = gson.fromJson(jsonData, Person.class);

//如果得到的是json数组数据:
List<Person> people = gson.fromJson(jsonData, new TypeToken<List<Person>>(){}.getType());

关于new TypeToken:blog.csdn.net/jiangyu1013...

java 复制代码
//示例 由于basic的值依旧是一个json对象,所以还需要再定一个basic类
public class Weather {
    public String status;
    public Basic basic;
}

public class Basic {

    @SerializedName("city")
    public String cityName;

    @SerializedName("id")
    public String weatherId;

    public Update update;

    public class Update {
        @SerializedName("loc")
        public String updateTime;
    }

}
java 复制代码
//在activity中的用法:
//与jsonObject配合使用
JSONObject jsonObject = new JSONObject(jsonData);
JSONArray jsonArray = jsonObject.getJSONArray("HeWeather");
String weatherContent = jsonArray.getJSONObject(0).toString();
//由于数组里只有一个数据,所以用0就好
Gson gson =  new Gson();
Weather weather = gson.fromJson(weatherContent, Weather.class);

//例子:获取weatherId
String weatherId = weather.basic.weatherId;
相关推荐
littlepeanut.top几秒前
C++中将FlatBuffers序列化为JSON
开发语言·c++·json·flatbuffers
Android系统攻城狮27 分钟前
Android内核进阶之获取DMA地址snd_pcm_sgbuf_get_addr:用法实例(九十一)
android·pcm·android内核·音频进阶·pcm硬件参数
清空mega1 小时前
Android Studio移动应用基础教程(前言)
android·ide·android studio
2501_937145411 小时前
2025IPTV 源码优化版实测:双架构兼容 + 可视化运维
android·源码·源代码管理·机顶盒
zhoutanooi3 小时前
安卓bp文件编译学习
android·学习
aramae4 小时前
MySQL数据库入门指南
android·数据库·经验分享·笔记·mysql
百锦再4 小时前
选择Rust的理由:从内存管理到抛弃抽象
android·java·开发语言·后端·python·rust·go
whatever who cares5 小时前
在Java/Android中,List的属性和方法
android·java
遇见火星5 小时前
LINUX的 jq命令行处理json字段指南
java·linux·json·jq
油炸小波7 小时前
09-微服务原理篇(XXLJOB-幂等-MySQL)
android·mysql·微服务