天天看點

Android中使用Gson解析JSON資料的兩種方法

Json是一種類似于XML的通用資料交換格式,具有比XML更高的傳輸效率;本文将介紹兩種方法解析JSON資料,需要的朋友可以參考下

Json是一種類似于XML的通用資料交換格式,具有比XML更高的傳輸效率. 

從結構上看,所有的資料(data)最終都可以分解成三種類型: 

第一種類型是标量(scalar),也就是一個單獨的字元串(string)或數字(numbers),比如"北京"這個單獨的詞。 

第二種類型是序列(sequence),也就是若幹個相關的資料按照一定順序并列在一起,又叫做數組(array)或清單(List),比如"北京,上海"。 

第三種類型是映射(mapping),也就是一個名/值對(Name/value),即資料有一個名稱,還有一個與之相對應的值,這又稱作散列(hash)或字典(dictionary),比如"首都:北京"。 

Json的規格非常簡單,隻用一個頁面幾百個字就能說清楚,而且Douglas Crockford聲稱這個規格永遠不必更新,因為該規定的都規定了。 

1) 并列的資料之間用逗号(",")分隔。 

2) 映射用冒号(":")表示。 

3) 并列資料的集合(數組)用方括号("[]")表示。 

4) 映射的集合(對象)用大括号("{}")表示。 

在Android中可以使用Gson解析JSON資料 

首先,從 code.google.com/p/google-gson/downloads/list下載下傳GsonAPI: 

google-gson-1.7.1-release.zip 

把gson-1.7.jar copy到libs(項目根目錄建立一個libs檔案夾)中。 

可以使用以下兩種方法解析JSON資料: 

通過擷取JsonReader對象解析JSON資料:

String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]"; 

try{ 

JsonReader reader = new JsonReader(new StringReader(jsonData)); 

reader.beginArray(); 

while(reader.hasNext()){ 

reader.beginObject(); 

String tagName = reader.nextName(); 

if(tagName.equals("username")){ 

System.out.println(reader.nextString()); 

else if(tagName.equals("userId")){ 

reader.endObject(); 

reader.endArray(); 

catch(Exception e){ 

e.printStackTrace(); 

}

通過把JSON資料映射成一個對象,使用Gson對象的fromJson()方法擷取一個對象數組進行操作: 

建立JSON資料對應的一個POJO對象User.java:

public class User { 

private String username ; 

private int userId ; 

public String getUsername() { 

return username; 

public void setUsername(String username) { 

this.username = username; 

public int getUserId() { 

return userId; 

public void setUserId(int userId) { 

this.userId = userId; 

使用Gson對象擷取User對象資料進行相應的操作:

Type listType = new TypeToken<LinkedList<User>>(){}.getType(); 

Gson gson = new Gson(); 

LinkedList<User> users = gson.fromJson(jsonData, listType); 

for (Iterator iterator = users.iterator(); iterator.hasNext();) { 

User user = (User) iterator.next(); 

System.out.println(user.getUsername()); 

System.out.println(user.getUserId()); 

如果要處理的JSON字元串隻包含一個JSON對象,則可以直接使用fromJson擷取一個User對象:

String jsonData = "{\"username\":\"arthinking\",\"userId\":001}"; 

User user = gson.fromJson(jsonData, User.class); 

System.out.println(user.getUserId());

    本文轉自 一點點征服   部落格園部落格,原文連結:http://www.cnblogs.com/ldq2016/p/5969202.html,如需轉載請自行聯系原作者