Android之json數據解析
首先是介紹:
一、什么是json數據
1、json:javascript object Notation的簡稱
2、json數據是一系列鍵值對的集合;
3、json已經被大多數開發人員,在網絡數據的傳輸當中應用非常廣泛;
4、json相對于xml來講解析稍微方便一些
5、它的基本數據格式是:
{
"name":"Michael",
"andress":
{
"city":"Beijing",
"Street":"Chaoyang Road",
"prostcode":100024
}
}
二、json數據跟xml的比較
1、json和xml的數據可讀性基本相同;
2、json和xml同樣擁有豐富的解析手段;
3、json相對于xml來講,數據體積小;
4、json與javascrpit的交互更加方便;
5、json對數據的描述性相對較差;
三、android中的3種解析方式的代碼如下:
首先要把jar包拷到項目中:
http://code.google.com/p/google-gson/
第一種方式解析:private String jsonData1="[{\"name\":\"renhaili\",\"age\":20},{\"name\":\"zhouxiaodong\",\"age\":21}]";這種數據的解析方式:
public void parseJson(String jsonData) {
// 如果需要從解析json數據,首先要生成一個jsonReader對象
JsonReader reader = new JsonReader(new StringReader(jsonData));
try {
// 現在開始解析
reader.beginArray();// 開始解析數組
while (reader.hasNext()) {
reader.beginObject();// 開始解析對象
while (reader.hasNext()) {
String tagName = reader.nextName();
if (tagName.equals("name")) {
System.out.println(reader.nextString());
} else if (tagName.equals("age")) {
System.out.println(reader.nextInt());
}
}
reader.endObject();// 結束對象解析
}
reader.endArray();// 結束數組解析
} catch (IOException e) {
e.printStackTrace();
}
}第二種方式解析:private String jsonData2="{\"name\":\"xiong\",\"age\":18}";這種數據的解析方式:
單個json對象轉化為與之對應的user對象
這種只能解析對象,不可以解析數組的
首先要創建一個User類:
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}然后利用User類解析json數據:
Gson 是 Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。可以將一個 JSON 字符串轉成一個 Java 對象,或者反過來。
Gson網址http://code.google.com/p/google-gson/public void pareUserFromJson(String jsonData){
Gson gson=new Gson();//創建Gson對象,
User user=gson.fromJson(jsonData,User.class);
System.out.println(user.getName());
System.out.println(user.getAge());
}第三種解析:還是第一種的數據類型用第二種方式解析:
json對象數組轉化為與之對應的user對象
如果想要JSON數組轉換成多個的User對象,可以使用TypeToken:
Type 是 Java 編程語言中所有類型的公共高級接口。它們包括原始類型、參數化類型、數組類型、類型變量和基本類型。
public void parseJsonFromUser(String jsonData){
//likedlist是雙向列表
Type listType=new TypeToken<LinkedList<User>>(){}.getType();
Gson gson=new Gson();
LinkedList<User> users=gson.fromJson(jsonData, listType);
for(Iterator<User> iterator=users.iterator();iterator.hasNext();){
User user=(User)iterator.next();
System.out.println(user.getName());
System.out.println(user.getAge());
}
}