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