Android Json解析 - 初步
JSON與XML一樣都是數據格式,JSON的數據格式比XML更小。這里主講JSON。
本文引用地址:http://www.104case.com/article/201609/305004.htmJSON是JavsScript對象符號。
下面是一個簡單的JSON格式
{name:zhangsan,age:22,address:太原}
這就是一個對象,里面的值key是冒號前面的類容,value是冒號后面的類容。
JSON還可以有數組的形式,如下:
[{name:zhangsan,age:22,address:太原},
{name:lisi,age:20,address:黃岡},
{name:wangwu,age:21,address:武漢}]
在中括號里全都是對象,這種對象的個數沒限制,對象里是鍵值對。
在JSON對象中還可以有對象,如下:
{
name:zhangsan,age:22,
address:{country:中國,province:山西,city:太原}
}
這就是說address key是一個對象。
這就是JSON的基本形式。
首先下載解析JSON需要的Jar包 下載。這是Google提供解析JSON的開源的Json Jar包。
1.最基礎的解析
這種解析式最普遍的,根據JSON的格式來解析,我來解析如下的JSON數據:
{name:zhangsan,age:22,address:太原}
首先
String s={name:zhangsan,age:22,address:太原};
這里使用反斜杠來使用雙引號。
JsonReader reader=new JsonReader(new StringReader(s));
聲明一個JsonReader對象,將String s傳入。
try {
JsonReader reader=new JsonReader(new StringReader(data));
reader.beginObject();
while(reader.hasNext())
{
String key=reader.nextName();
if(name.equals(key))
{
System.out.println(reader.nextString());
}
if(age.equals(key))
{
System.out.println(reader.nextInt());
}
if(address.equals(key))
{
System.out.println(reader.nextString());
}
}
reader.endObject();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
結果如下:

開始解析的時候調用reader.beginObject();結束的時候調用reader.endObject().應為一個對象里可能有很多的鍵值對,所以要使用while循環,當對象里的鍵值對都循環完了的話reader.hasNext()方法返回false。reader.nextXXX()獲得你所要的值,XXX為類型。
2.解析數組
下面解析如下的Json數據:
[{name:zhangsan,age:22,address:太原},
{name:lisi,age:20,address:黃岡},
{name:wangwu,age:21,address:武漢}]
如下代碼:
try {
JsonReader reader=new JsonReader(new StringReader(data));
reader.beginArray();
while(reader.hasNext())
{
reader.beginObject();
while(reader.hasNext())
{
String key=reader.nextName();
if(name.equals(key))
{
System.out.println(reader.nextString());
}
if(age.equals(key))
{
System.out.println(reader.nextInt());
}
if(address.equals(key))
{
System.out.println(reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
根據這個Json的數據結構,我先解析數組,所以開始就reader.beginArray();當然還要reader.endArray();同樣使用reader.hasNext()來判斷數組是否都解析完了。
下面是效果圖:

3.包含對象的對象解析
下面我解析如下的Json數據:
{
name:zhangsan,age:22,
address:{country:中國,province:山西,city:太原}
}
廢話不多說先來代碼:
try {
JsonReader reader=new JsonReader(new StringReader(data));
reader.beginObject();
while(reader.hasNext())
{
String key=reader.nextName();
if(name.equals(key))
{
System.out.println(reader.nextString());
}
if(address.equals(key))
{
reader.beginObject();
while(reader.hasNext())
{
String theKey=reader.nextName();
評論