第一行代码-10.4 解析JSON格式数据

  和XML相比,JSON的优势在于体积小,网络上传输的时候更省流量,但是缺点在于语义性较差,看起来不如XML直观。
  准备工作:创建get_data.json,然后输入内容:

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

  依然是在本地测试打开这个文件,效果如下:

1、使用JsonObject
  直接展示代码和效果:

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();
    }
}

这里写图片描述

2、使用GSON
  GSON的功能更加强大,不过它本身并没有添加到Android的API中,需要下载GSON的json包,然后添加到工程目录下的libs文件夹内。
这里写图片描述
  然后说明一下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<Person> people = gson.fromJson(jsonData, new TypeToken<List<Person>>()
{}.getType());

  下面就来测试一下它的用法:首先创建App类:

// App.java
public class App {

    private String id;

    private String name;

    private String version;

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setVerison(String version) {
        this.version = version;
    }

    public String getVersion() {
        return version;
    }
}

  然后修改MainActivity中的代码,如下:

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());
    }
}

  最终效果和前面一样,就不展示了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值