欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android开发之原生解析复杂的json数据

程序员文章站 2022-06-01 15:29:22
...

前言:现在app开发肯定离开不了数据的解析,现在数据大部分都是json解析,多数人都使用第三方jar包来解析,但是原生解析同样重要,今天我来实现一下如何用安卓原生来解析复杂的json数据,保准你看了此篇博客之后永远也不会担心json数据的解析了!

-----------------分割线--------------------

先来看下json数据的构成:

Android开发之原生解析复杂的json数据

这是一段天气预报的json数据,数据大致分成四层,里面有数组有对象,数组里面镶嵌对象,对象里面又有对象。

-----------------分割线------------------

结构分析:(代码可以作为javaBean,可自行实现)

    //第一层
    public int error_code;
    public String reason;
    public String resultcode;
    public JSONObject result;//含第二层:对象

    //result对应的第二层
    public JSONArray future;//含第三层:数组
    public JSONObject sk;//含第三层:对象
    public JSONObject today;//含第三层:对象

    //future对应的第三层
    public String week;
    public JSONObject weather_id;//含第四层:对象

    //sk对应的第三层
    public String humidity;
    public String temp;
    public String time;
    public String wind_direction;
    public String wind_strength;

    //today对应的第三层
    public String city;
    public JSONObject weather_id;//含第四层:对象

    //weather_id对应的第四层
    public String fa;
    public String fb;


-----------第一层数据解析-----------
其实你把json数据给分析好,基本就是事半功倍了,通过json数据的构造图我们可以知道result是一个大的对象,至于里面什么对象,要看第二层解析了!

ok,我们开始解析最外层数据:

public void click1(View view) {
        try {
            JSONObject jsonObject = new JSONObject(data);
            int error_code = jsonObject.getInt("error_code");
            String reason = jsonObject.getString("reason");
            String resultcode = jsonObject.getString("resultcode");
            JSONObject result = jsonObject.getJSONObject("result");
            Log.i("--最外层解析---->", "error_code:" + error_code);
            Log.i("--最外层解析---->", "reason:" + reason);
            Log.i("--最外层解析---->", "resultcode:" + resultcode);
            Log.i("--最外层解析---->", "result:" + result);
            parse2(result);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
截图:

Android开发之原生解析复杂的json数据

--------第二层数据解析--------
通过第一层的解析我们可以得到result这个大对象,可以通过json结构图来看下第二层数据有谁。

ok来看第二层代码的解析:

private void parse2(JSONObject result) {
        try {
            JSONArray future = result.getJSONArray("future");
            JSONObject sk = result.getJSONObject("sk");
            JSONObject today = result.getJSONObject("today");
            Log.i("--result对应的第二层解析---->", "future:" + future);
            Log.i("--result对应的第二层解析---->", "sk:" + sk);
            Log.i("--result对应的第二层解析---->", "today:" + today);

            parse3_1(future);
            parse3_2(sk);
            parse3_3(today);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
看下运行结果:

Android开发之原生解析复杂的json数据

---------第三层数据解析-----------
通过第二层解析可以知道,解析出来了两个对象和一个数组,所以需要在第三层解析这三个数据:

sk和today的解析可以参考第二层解析,我们主要来看future的数组解析。

分析:既然书数组解析,我们肯定首先要知道数组的个数,然后for循环解析,可以获得数组的每一个对象,然后再对每一个对象进行解析。

ok我们来看代码(解析的是局部数据):

 private void parse3_1(JSONArray future) {
        try {
            for (int i = 0; i < future.length(); i++) {
                JSONObject jsonObject = future.getJSONObject(i);
                String week = jsonObject.getString("week");
                Log.i("--future对应的第三层解析--->", "week:" + week);
                JSONObject weather_id = jsonObject.getJSONObject("weather_id");
                Log.i("--future对应的第三层解析--->", "weather_id:" + weather_id);
                parse4(weather_id);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

来看运行效果图:

Android开发之原生解析复杂的json数据



-----------第四层数据解析--------
通过第三层解析,我们发现又有一个对象weather_id,这个解析起来比较简单,我们快速看下代码:

    private void parse4(JSONObject weather_id) {
        try {
            String fa = weather_id.getString("fa");
            String fb = weather_id.getString("fb");
            Log.i("--weather_id对应的第四层解析-->", "fa:" + fa);
            Log.i("--weather_id对应的第四层解析-->", "fb:" + fb);
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
运行就不截图了

------------------总结-------------------

其实json数据解析起来也非常简单,这里我简单总结一下:

1.使用json格式化工具方便查看json结构。

2.自己动手列出来数组和对象。

关于数组和对象的区分:

1.遇到{}就是一个对象,用JSONObject。

2.遇到[]就是数组,用JSONArray。

-----------------下载-------------------

完整代码下载链接:Android开发之原生解析复杂的json数据代码

json格式化工具下载:HiJson 2.1.2_jdk64