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

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数据了,项目运行结果如下:
这里写图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值