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