【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;
相关推荐
Reese_Cool15 分钟前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言
平凡シンプル33 分钟前
安卓 uniapp跨端开发
android·uni-app
elina801336 分钟前
安卓实现导入Excel文件
android·excel
严文文-Chris40 分钟前
【设计模式-享元】
android·java·设计模式
趋势大仙1 小时前
SQLiteDatabase insert or replace数据不生效
android·数据库
DS小龙哥1 小时前
QT For Android开发-打开PPT文件
android·qt·powerpoint
试行2 小时前
Android实现自定义下拉列表绑定数据
android·java
Dingdangr7 小时前
Android中的Intent的作用
android
技术无疆7 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
GEEKVIP7 小时前
Android 恢复挑战和解决方案:如何从 Android 设备恢复删除的文件
android·笔记·安全·macos·智能手机·电脑·笔记本电脑