Android解析JSON数据

来源:互联网 发布:mac如何画泳道图 编辑:程序博客网 时间:2024/05/22 03:27

在客户端与服务器通信中,服务器下发的数据一般为JSON或XML格式(Json居多),客户端要解析对应的数据,显示到UI或保存数据。

如果不了解JSON数据请查看百度JSON

本文主要讲解如何解析JSON,关于请求服务器下发数据等请读者自行查阅相关资料

  • 解析简单JSON
    首先我们来看一段JSON数据如下:
{    "age": 22,    "name": "wuxiaoqi",    "sex": "男"}

很简单的一段JSON数据,age对应年龄,name对应姓名,sex对应性别。
JSON数据中以key:value键值对形式保存数据,如age,name,sex都是key,冒号后对应value值,在JSON中{}对应JSONObject。

下面给出代码来解析上述JSON数据

String json = "{\n" +                "    \"age\": 22,\n" +                "    \"name\": \"wuxiaoqi\",\n" +                "    \"sex\": \"男\"\n" +                "}";try {     JSONObject jsonObject = new JSONObject(json);     int age = jsonObject.getInt("age");     String name = jsonObject.getString("name");     String sex = jsonObject.getString("sex");     Log.i(TAG, "age:" + age + ",name:" + name + ",sex:" + sex);     } catch (JSONException e) {        e.printStackTrace();     }

运行程序,可以看到数据已经成功解析出来了,是不是很简单了
这里写图片描述

这里要注意下key:value中value带双引号为字符串类型,不带字符串为整型
如上述 **int age = jsonObject.getInt(“age”);**age为整型,所以要用getInt()方法解析,下图给出JSONObject中对应解析的方法:
这里写图片描述

  • 解析复杂JSON
    下面给出一段稍微复杂的JSON数据
{    "student": [        {            "age": 22,            "name": "wuxiaoqi",            "sex": "男"        },        {            "age": 18,            "name": "卡特A",            "sex": "女"        }    ]}

上述JSON数据中多出了[][]对应JSONArray,只要记住2点

  1.  {}  使用JSONObject解析  2.  []  使用JSONArray解析

解析代码如下:

String json = "{\n" +                "    \"student\": [\n" +                "        {\n" +                "            \"age\": 22,\n" +                "            \"name\": \"wuxiaoqi\",\n" +                "            \"sex\": \"男\"\n" +                "        },\n" +                "        {\n" +                "            \"age\": 18,\n" +                "            \"name\": \"卡特A\",\n" +                "            \"sex\": \"女\"\n" +                "        }\n" +                "    ]\n" +                "}";try {     JSONObject jsonObject = new JSONObject(json);     JSONArray jsonArray = jsonObject.getJSONArray("student");     JSONObject j1 = jsonArray.getJSONObject(0);     JSONObject j2 = jsonArray.getJSONObject(1);     print(j1);     print(j2);    } catch (JSONException e) {       e.printStackTrace();    }private void print(JSONObject jObject) throws JSONException {     int age = jObject.getInt("age");     String name = jObject.getString("name");     String sex = jObject.getString("sex");     Log.i(TAG, "age:" + age + ",name:" + name + ",sex:" + sex); }

运行程序,可以看到已经成功解析出数据了
这里写图片描述

这里要注意下JSONArray是个数组,我们可以通过getJSONObject()方法获取对应下标的JSONObject,下标从0开始,这里给出JSONArray中对应的解析方法:
这里写图片描述

  • 使用GSON解析JSON
    如果JSON数据过于复杂,那么我们可以使用第三方库来方便解析JSON,这里我们使用了谷歌公司提供的库GSON
    首先在build.gradle文件添加依赖
compile 'com.google.code.gson:gson:2.2.4'

首先新建一个model类对应我们的要解析的数据:

public class StudentModel {    public int age;    public String name;    public String sex;   @Override    public String toString() {        return "StudentModel{" +                "age=" + age +                ", name='" + name + '\'' +                ", sex='" + sex + '\'' +                '}';    }}

这里要注意下,属性名要于JSON数据中的key一一对应。

使用GSON解析代码如下:

String json = "{\n" +                "    \"age\": 22,\n" +                "    \"name\": \"wuxiaoqi\",\n" +                "    \"sex\": \"\"\n" +                "}";Gson gson = new Gson();StudentModel studentModel = gson.fromJson(json, StudentModel.class);Log.i(TAG, studentModel.toString());

这里写图片描述

可以看到我们代码只使用了gson.fromJson这句代码就把数据解析出来了,是不是很方便呢。

这里要注意下:
1. 因为model中的属性名要与JSON数据中key一一对应,那么打正式包的时候是不能混淆model类中属性名的,要在混淆文件中添加忽略
2. 过于复杂的JSON数据要写对应的model类是不是太费劲了呢?在AndroidStudio中有这样一个插件GsonFormat:
3. 这里写图片描述
安装上这个插入就可以方便的生成对应model数据类:
这里写图片描述

  1. 在要生成的model数据类中按 Alt键+S键,会弹出GsonFormat弹窗
  2. 将JSON数据拷入,点击确定
  3. 勾选要生成的属性,默认全部勾选,点击确定完成。

到这里解析JSON数据就讲完了,有兴趣的同学可以在网上找些复杂的JSON数据来练习下解析JSON数据。

原创粉丝点击