一。什么是JSON:
1.JSON:Javascript Object Nation
2.JSON是一系列键值对的集合
3.JSON以经被大多数开发人员接受,在网络数据传输中应用相当广泛
4.JSON相对XML来说解析相对方便一些
二。JSON 与 XML 相比:
1.JSON和XML的数据可读性基本相同
2.JSON和XML同样拥有丰富的解析手段
3.JSON相对于XML来讲,数据的体积小
4.JSON与JavaScript的交互更加方便
5.JSON对数据的描述性比XML较差
6.JSON的速度要远远快于XML
三。android2.3提供的json解析类android的json解析部分都在包org.json下,主要有以下几个类:JSONObject:
(1)可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。
(2)它对外部应用toString()方法输出的数值,对于内部引用内部的put()方法添加数值:new JSONObject().put("JSON", "Hello, World!")。
(3)Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。JSONStringer:
(1)json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。
(2)每个JSONStringer实体只能对应创建一个JSON text。
(3)其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。
(4)使用时注意object与endObject的配对、array与endArray的配对使用。JSONArray:
(1)它代表一组有序的数值。
(2)get()和opt()两种方法都可以通过index索引返回指定的数值。
(3)put()方法用来添加或者替换数值。
(4)同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。JSONTokener:json解析类JSONException:json中用到的异常
四。构建文本的两种方法
(1)JSONObject, JSONArray来构建json文本:
要构建的JSON文本的例子如下:
{
{
"学号":"20101111",
"姓名":"张菲",
"成绩":
{
"java":"90","android":"92"
},
"电话":["13725986596","18852663636"],
"注册":true,
"历届成绩":
{
"2010":{"高数":"88","大物":"85","C语言":"90"},
"2011":{"C++":"95","算法":"89"}
}
}
}
java代码如下:/*
* 用JSONObject和JSONArray创建Json文档
*/
public static String createJSON1() {
JSONObject student = new JSONObject();
try {
//添加的值为字符串
student.put("学号", "20101111");
student.put("姓名", "张非");
//添加的值为对象
JSONObject grade=new JSONObject();
grade.put("java", "90");
grade.put("android", "92");
student.put("成绩", grade);
//添加的值为数组
JSONArray phone=new JSONArray();
phone.put("13725986596").put("18852663636");
student.put("电话", phone);
//添加的值为布尔
student.put("注册", true);
//添加的值为map
JSONObject allYearGrade=new JSONObject();
Map map1=new HashMap();
Map map2=new HashMap();
map1.put("高数", "88");
map1.put("大物", "85");
map1.put("c语言", "90");
map2.put("c++", "95");
map2.put("算法", "89");
allYearGrade.put("2010", map1);
allYearGrade.put("2011", map2);
student.put("历届成绩", allYearGrade);
//打印测试
System.out.println(student.toString());
} catch (JSONException e) {
e.printStackTrace();
}
return student.toString();
}
看一下输出结果:
{
"成绩":{"android":"92","java":"90"},
"电话":["13725986596","18852663636"],
"学号":"20101111","姓名":"张非",
"注册":true,
"历届成绩":{
"2011":{"c++":"95","算法":"89"},
"2010":{"c语言":"90","大物":"85","高数":"88"}
}
}
(2)还可以使用JSONStringer来构建json文本
代码如下:/*
* 用JSONStringer的方法创建Json文档
*/
public static String createJSON2(){
JSONStringer student =new JSONStringer();
try {
//整体的对象student
student.object();
//各个String类型的添加
student.key("学号");
student.value("20102222");
student.key("姓名");
student.value("王剑");
//子对象的添加,注意object()与endObject()成对出现
student.key("成绩");
student.object();
student.key("java");
student.value("88");
student.key("android");
student.value("96");
student.endObject();
//数组的添加,注意array()与endArray()成对出现
student.key("电话");
student.array();
student.value("13955554444").value("18736992588");
student.endArray();
//布尔值得添加
student.key("注册");
student.value(false);
//结束整个对象student
student.endObject();
//打印测试
System.out.println(student.toString());
} catch (JSONException e) {
e.printStackTrace();
}
return student.toString();
}
测试结果如下:{
"学号":"20102222",
"姓名":"王剑",
"成绩":{"java":"88","android":"96"},
"电话":["13955554444","18736992588"],
"注册":false
}
(3)json文本解析
代码如下:
/*
* json的解析
*/
public static void parseJSON(String strJSON){
try {
JSONObject student=new JSONObject(strJSON);
String id=student.getString("学号");
String name=student.getString("姓名");
JSONObject grade=student.getJSONObject("成绩");
JSONArray phone=student.getJSONArray("电话");
boolean login=student.getBoolean("注册");
System.out.println(id+" "+name+" "+grade.toString()+" "+phone.toString()+" "+login);
} catch (JSONException e) {
e.printStackTrace();
}
}
测试结果如下:20102222 王剑 {"android":"96","java":"88"} ["13955554444","18736992588"] false