Android——Json解析

来源:互联网 发布:美国数据网站 编辑:程序博客网 时间:2024/05/01 21:10

1.Json概念以及与XML的比较

1)Json是什么?

答:JavaScript Object Natation, 一种轻量级的数据交换格式, 与XML一样, 广泛被采用的客户端和服务端交互的解决方案!具有良好的可读和便于快速编写的特性。

2)Json与XML的比较

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

3)Json的格式规范

JSON建构于两种结构:

1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

2.Android提供Json解析类

这些API都存在于org.json包下,而我们用到的类有下面这些:

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

3.代码示例:解析Json字符串:

1)第一种结构解析——简单的Json字符串解析示例:

[    { "id":"1","name":"A","age":"18" },    { "id":"2","name":"B","age":"18"  },    { "id":"3","name":"C","age":"18" }]

我们解析的是上面这个简单的Json,首先我们来写一个POJO类:

Person.java

public class Person {    private String id;    private String name;    private String age;    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;    }    public void setAge(String age){        this.age = age;    }    public String getAge(){        return this.age;    }    @Override    public String toString() {        return this.name + "~年方:" + this.age;    }}

写一个解析上述Json字符串的方法:

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

2)第二种结构解析——复杂的Json字符串解析示例:

2)复杂的Json字符串解析示例:

如果是这样的Json字符串呢?

解析代码如下

private void parseDiffJson(String json) {    try {        JSONObject jsonObject1 = new JSONObject(json);        Log.e("Json", json);        JSONArray jsonArray = jsonObject1.getJSONArray("ch");        for (int i = 0; i < jsonArray.length(); i++) {            JSONObject jsonObject = (JSONObject) jsonArray.get(i);            //取出name            String sname = jsonObject.getString("names");            JSONArray jarray1 = jsonObject.getJSONArray("data");            JSONArray jarray2 = jsonObject.getJSONArray("times");            Log.e("Json", sname);            Log.e("Json", jarray1.toString());            Log.e("Json", jarray2.toString());        }    } catch (Exception e) {        e.printStackTrace();    }}

看下打印的Log:


0 0