【coder-pig 教程学习笔记5】Json 解析

本文介绍了JSON与XML的区别,展示了JSON的基本格式,并提供了Android平台上的JSON解析示例,包括简单的JSON对象和数组解析,以及复杂的嵌套结构解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.JSON 与 XML 的比较

  • JSON 和 XML 的数据可读性基本相同
  • JSON 和 XML 同样拥有丰富的解析手段
  • JSON 相对于 XML 来讲,数据的体积小
  • JSON  与 JavaScript 的交互更加方便
  • JSON 对数据的描述性比 XML 差
  • JSON 的速度要远远快于 XML

总的来说, JSON 体积更小,节省流量,但不如 XML 直观,可读性比较差。


2.JSON 的格式
语法规则:数据以键值对的形式保存;数据用逗号分隔;花括号保存对象;方括号保存数组。

[
    {"id":"1","name":"one"},
    {"id":"2","name":"two"},
    {"id":"3","name":"three"}
]

3.Android 提供的 JSON 解析类
在 org.json 包下有以下类可用:

  • JSONObject:JSON 对象,可以完成 JSON 字符串与 Java 对象的相互转换
  • JSONArray:JSON 数组,可以完成 JSON 字符串与 Java 集合或对象的相互转换
  • JSONStringer:JSON 文本构建类,这个类可以帮助快速和便捷地创建 JSON text
  • JSONTokener:JSON 解析类
  • JSONException: JSON 异常

4.代码示例
(1)简单 JSON 的解析
以第2点中的例子进行解析
先创建一个 POJO 类:

public class Person {
    private String id;
    private String name;

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

    public String getId() {
        return this.id;
    }

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

    public String getName() {
        return this.name;
    }
}

再创建一个解析上述 JSON 字符串的方法:

private void parseSimpleJson(String json) {
    List persons = nere ArrayList<Person>();
    try {
        JSONArray jsonArray = new JSONArray(json);
        for (int i = 1; i <= jsonArray.length; i++) {
            JSONObject jsonObject = (JSONObject) jsonArray.get(i);
            Person person = new Person();
            person.setId(i + "");
            person.setName(jsonObject.getString("name"));
            persons.add(person);
        }
    }catch (Exception e) {
        e.printStackTrace();
    }
}

(2)复杂 JSON 解析
如下 JSON 字符串

{"ch":[{"name":"广师","data":[2,2,1,1,1,1],"time":[10,11,13,13,21,23]},{"name":"广师大","data":[2,2,1,1,1,1],"time":[10,11,13,13,21,23]}]}

解析代码如下:

private void parseComplexJson(String json) {
    try {
        JSONObject jsonObject = new JSONObject(json);
        JSONArray jsonArray = jsonObject.getJSONArray("ch");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = (JSONObject) jsonArray.get(i);
            String name = jsonObject.getString("name");
            JSONArray jsonArray1 = jsonObject.getJSONArray("data");
            JSONArray jsonArray2 = jsonObject.getJSONArray("time");
            Log.d(name, jsonArray1.toString(), jsonArray2.toString());
        }
    }catch (Exception e) {
        e.printStackTrace();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值