美文网首页android 基础
JSON常用解析方式

JSON常用解析方式

作者: 迷途之中小书童 | 来源:发表于2018-09-03 21:26 被阅读0次

    背景

    android开发过程中,针对后台返回前端的JSON数据进行解析的方式有很多种,可以使用一些开源库例如,FastJSON、Jackson、GSON、JSONObject等,今天重点介绍一下笔者常用的两种方式,JSONObject(官方提供)以及GSON(谷歌开源库)。

    使用JSONObject解析

    当返回前台的是JSON数组时, 数据格式如下

    [
    {
    "l1": {
    "l1_1": [
    "l1_1_1",
    "l1_1_2"
    ]
    },
    "l2": {
    "l2_1": null
    }
    },
    {
    "l1": {
    "l1_1": [
    "l1_1_1",
    "l1_1_2"
    ]
    },
    "l2": {
    "l2_1": null
    }
    }
    ]

    此时需要配合JSONArray一起使用,先将后台返回的json字符串包装成JSONArray数组

    String jsonStr;
    JSONArray jsonArray = new JSONArray(jsonStr);

    然后,遍历jsonArray数组,并取出JSONObject

    for (int i = 0; i < jsonArray.length; i++) {
    JSONObject jsonObject = jsonArray.get(i);
    String jsonObjectContent = jsonObject.getString("key"); // 取出key对应的values
    }

    当返回前台的是JSON对象时,数据格式如下

    {
    "l1": {
    "l1_1": [
    "l1_1_1",
    "l1_1_2"
    ]
    },
    "l2": {
    "l2_1": null
    }
    }

    这种数据格式直接使用JSONObject进行解析

    JSONObject jsonObject = new JSONObject(responce.json);
    String jsonObjectContent = jsonObject.optString("key", "defuat");

    这里也可以使用jsonObject.getString()方法,为了区分两种方式的区别,先看下源码

    public String optString(String name, String fallback) {
    Object object = opt(name);
    String result = JSON.toString(object);
    return result != null ? result : fallback;
    }

    static String toString(Object value) {
    if (value instanceof String) {
    return (String) value;
    } else if (value != null) {
    return String.valueOf(value);
    }
    return null;
    }

    由上边两段代码可以发现,如果有获取到name对应的value,则强制它为String类型,如果不存在则返回一个默认值。
    而getString方法

    public String getString(String name) throws JSONException {
    Object object = get(name);
    String result = JSON.toString(object);
    if (result == null) {
    throw JSON.typeMismatch(name, object, "String");
    }
    return result;
    }
    在没有该字段或结果为null的时候会抛出异常。类型不同不会导致异常。

    使用GSON解析

    使用GSON库解析需要在工程build.gradle文件中增加依赖

    dependencies {
    compile 'com.google.code.gson:gson:2.7'
    }

    GSON使用起来的方便之处在于,可以直接将json转成业务层model对象,比如一段json如下

    String jsonData = {"name":"wang","age:"21"}

    创建业务层model类

    class Person {
    String name;
    String age;
    }

    json转Person

    Person person = new Gson.fromJson(jsonData, Person.class)

    当需要转成数组时,需要使用TypeToken,写法如下

    List<Person> personList = new Gson.fromJson(jsonData, new TypeToken<List<Person>>(){}.getType());

    相关文章

      网友评论

        本文标题:JSON常用解析方式

        本文链接:https://www.haomeiwen.com/subject/qoiiwftx.html