安卓开发:解析JSON格式数据

来源:互联网 发布:顶点网络微博平台代理 编辑:程序博客网 时间:2024/05/17 03:16

JSON的主要优势在于它的体积小,在网络上传输时可以更省流量。解析 JSON数据有很多种方法,可以使用官方提供的JSONObject,也可以使用谷歌的开源库GSON。另外,一些第三方的开源库,如Jackson,FastJSON等也非常不错。主要讲下前两种方法。

在开始之前,先在本地服务器如tomcat,在E:\apache-tomcat-7.0.22\webapps\ROOT目录中新建一个get_data.json的文件,并加入如下JSON格式的内容:

[{"id":"5","version":"5.5","name":"Angry Birds"},{"id":"6","version":"6.5","name":"Clash of Clans"},{"id":"7","version":"7.5","name":"Hey Day"}]

准备好数据之后,我们先来看下JSONObject如何解析JSON数据:

//JSONObject方式解析JSON数据    private void parseJSONWithJSONObject(String jsonData){        try {            JSONArray jsonArray = new JSONArray(jsonData);            for (int i = 0; i < jsonArray.length(); i++) {                JSONObject jsonObject = jsonArray.getJSONObject(i);                String id = jsonObject.getString("id");                String name = jsonObject.getString("name");                String version = jsonObject.getString("version");                Log.d("MainActivity", "id is :"+id);                Log.d("MainActivity", "name is :"+name);                Log.d("MainActivity", "version is :"+version);            }        } catch (Exception e) {            e.printStackTrace();        }    }

在得到了服务器返回的数据后,调用parseJSONWithJSONObject()方法来解析数据。可以看到,解析JSON的代码真的是非常简单,由于我在服务器中定义的是一个JSON数组,因此这里首先是将服务器返回的数据传入到一个JSONArray对象中。然后循环遍历这个JSONArray,从中取出的每一个元素都是一个JSONObject对象,每个JSONObject对象中又包含id、name和version这些数据。接下来只需要调用getString()方法将这些数据取出来,并打印即可。

下面来看下GSON如何解析JSON数据。不过GSON并没有被添加到Android官方的API中,因此需要在项目中添加一个GSON的jar包。

这里写图片描述

接下来我们需要根据服务器端的JSON数据新增一个APP实体类,并加入id、name和version三个字段。

public class App {    private String id;    private String name;    private String version;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getVersion() {        return version;    }    public void setVersion(String version) {        this.version = version;    }}

接下来编写parseJSONWithGSON()方法解析JSON数据:

    //GSON方式解析JSON数据    private void parseJSONWithGSON(String jsonData){        Gson gson = new Gson();        List<App> appList = gson.fromJson(jsonData, new TypeToken<List<App>>(){}.getType());        for (App app : appList) {            Log.d("MainActivity", "id is :"+app.getId());            Log.d("MainActivity", "name is :"+app.getName());            Log.d("MainActivity", "version is :"+app.getVersion());        }    }

GSON库究竟是神奇在哪里呢?其实它主要就是可以将一段JSON格式的字符串自动映射成一个对象。
比如说一段JSON格式的数据如下:

{"name":"Tom","age":20}

我们就可以定义一个Person类,并加入name和age这两个字段,然后只需简单的调用如下代码就能将JSON数据自动解析成一个Person对象了:

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

如果需要解析的是一段JSON数组就会麻烦一点,我们需要借助TypeToken将期望解析的数据类型传入到fromJson()方法中,如下所示:

List<App> appList = gson.fromJson(jsonData, new TypeToken<List<App>>(){}.getType());

这样我们就可以解析服务器传来的JSON数据了,项目运行结果如下:
这里写图片描述

注:文章采摘自《第一行代码》

0 0
原创粉丝点击