使用GSON 解析JSON 數據

[轉載]使用GSON 解析JSON 數據 

1、GSON 的介紹: 
    GSON 是一個JAVA 庫,可用於將JAVA 對象轉換稱JSON,它也可以被用於將一個JSON 字符串轉換爲等效的Java對象。 
    GSON 可以與任意Java對象,包括預先存在的對象或者你沒有源代碼結合。 
    背景:已經有很多開源項目,可以轉換Java對象到JSON。然而,他們中大多數要求在你的類上使用元註釋 Annotation,如果你沒有源碼,將不能給代碼加上Java這些元註解。大多數人也並不完全支持Java泛型的使用。GSON 認爲這些是非常重要的設計目標; 


2、用法準備: 
    下載GsonAPI:google-gson-1.7.1-release.zip ; 並投入使用,怎麼用大家都明白 

3、解析JSON數據的兩種方法: 
    
    (1): 通過獲取JsonReader對象解析JSON數據; 
    (2): 通過把JSON數據映射成一個對象,使用Gson對象的fromJson()方法獲取一個對象數組進行操作;
 

4、案例: 
Java代碼  收藏代碼
  1. package com.example.file;  
  2.   
  3. import java.io.StringReader;  
  4. import java.net.Proxy.Type;  
  5. import java.util.ArrayList;  
  6. import java.util.Iterator;  
  7. import java.util.LinkedList;  
  8. import java.util.List;  
  9.   
  10. import android.util.Log;  
  11.   
  12. import com.google.gson.Gson;  
  13. import com.google.gson.reflect.TypeToken;  
  14. import com.google.gson.stream.JsonReader;  
  15.   
  16. /** 
  17.  * GSON 解析 json 數據 
  18.  * @author Administrator 
  19.  * 
  20.  */  
  21. public class MyGson {  
  22.   
  23.     /** 
  24.      * 使用JsonReader對象解析 JSON 數據 
  25.      * @throws Exception 
  26.      */  
  27.     public void jsonReader() throws Exception{  
  28.         String json = "[{\"name\":\"aa\",\"age\":20,\"score\":90},{\"name\":\"ff\",\"age\":21,\"score\":80}]";  
  29.         // 1、創建JsonReader   
  30.         JsonReader reader = new JsonReader(new StringReader(json));  
  31.         reader.beginArray();  
  32.         while(reader.hasNext()){  
  33.             reader.beginObject();  
  34.             while(reader.hasNext()){  
  35.                 String str = reader.nextName();  
  36.                 if(str.equals("name")){  
  37.                     String name = reader.nextString();  
  38.                     Log.i("msg""name:"+name);  
  39.                 }  
  40.                 if(str.equals("age")){  
  41.                     int age = reader.nextInt();  
  42.                     Log.i("msg""age:"+age);  
  43.                 }  
  44.                 if(str.equals("score")){  
  45.                     int score = reader.nextInt();  
  46.                     Log.i("msg""score:"+score);  
  47.                 }  
  48.             }  
  49.             reader.endObject();  
  50.         }  
  51.         reader.endArray();  
  52.     }  
  53.       
  54.     /** 
  55.      * 測試: 
  56.      * 把對象映射成JSON數據格式 
  57.      * java to json 
  58.      */  
  59.     public void tojson(){  
  60.       
  61.         Student s1 = new Student("小黑",1390);  
  62.         Student s2 = new Student("小白",1470);  
  63.         Student s3 = new Student("小黃",1580);  
  64.         Student s4 = new Student("小綠",16100);  
  65.         List<Student> list = new ArrayList<Student>();  
  66.         list.add(s1);  
  67.         list.add(s2);  
  68.         list.add(s3);  
  69.         list.add(s4);  
  70.         Gson gson = new Gson();  
  71.         String s = gson.toJson(list);  
  72.         Log.i("msg""對象映射稱json格式爲:"+s);  
  73.     }  
  74.       
  75.     /** 
  76.      * 測試: 
  77.      * 通過把JSON 數據映成一個對象,使用GSON對象的fromJson()方法獲取一個對象數組進行操作; 
  78.      *  
  79.      * json to java 
  80.      *  
  81.      * 如果要處理的JSON字符串只包含一個JSON 對象,則可以直接使用fromJson獲取一個對象 
  82.      */  
  83.     public void fromjson(){  
  84.         Gson gson = new Gson();  
  85.         // 單個對象的操作  
  86.         String strjson = "{"+"\"name\":\"aa\",\"score\":90,\"age\":12"+"}";  
  87.         Student stu = gson.fromJson(strjson, Student.class); // 映射獲取數據  
  88.         Log.i("msg""姓名:"+stu.getName()+",年齡:"+stu.getAge());  
  89.           
  90.         /* 多個對象的操作 */  
  91.         String json = "[{\"name\":\"aa\",\"age\":20,\"score\":90}," +  
  92.                 "{\"name\":\"ff\",\"age\":21,\"score\":80}]";  
  93.         java.lang.reflect.Type listType = new TypeToken<LinkedList<Student>>(){}.getType();  
  94.         Gson gson1 = new Gson();  
  95.         LinkedList<Student> stus = gson1.fromJson(json, listType);  
  96.         for(Iterator  iterator=stus.iterator();iterator.hasNext();){  
  97.             Student st = (Student) iterator.next();  
  98.             Log.i("msg",st.getName());  
  99.         }  
  100.           
  101.     }  
  102. }  


[自創]

/**
	 * 測試:
	 * 通過把JSON 數據映成一個對象,使用GSON對象的fromJson()方法獲取一個對象數組進行操作;
	 *
	 * json to java
	 *
	 * 如果要處理的JSON字符串只包含一個JSON 對象,則可以直接使用fromJson獲取一個對象
	 */
	public void fromjson(){
		Gson gson = new Gson();
        /* 多個對象的操作 */
		String json = " [4, 480, 396, 25, 7, 23, 1, 17]";
		java.lang.reflect.Type listType = new TypeToken<ArrayList<String>>(){}.getType();
		Gson gson1 = new Gson();
		ArrayList<String> stus = gson1.fromJson(json, listType);
		for(Iterator  iterator=stus.iterator();iterator.hasNext();){
			String st = (String) iterator.next();
			Log.i("Hanjhmsg",st);
		}
	}

m_snsFriends:      {qq=[25, 23, 396, 4, 1, 7, 480, 17], weibo=[1049], mobile=[426, 23, 348, 347, 34, 427, 424, 824, 5036], system=[33, 1651, 174, 1659]}

for (String snstype : m_snsFriends.keySet()) {
					List<String> friendsInType = m_snsFriends.get(snstype);
					Log.e("Hanjh","friendsInType: "+friendsInType);
					Iterator it = friendsInType.iterator();
					String accountID;
					while (it.hasNext()) {
						accountID = (String) it.next();
						Log.w("Hanjh",accountID);
						WeModelAccount weModelAccount = WeAccountMgr.getInst().checkCreateAccount(accountID);
						Player player = WePlayerMgr.createPlayer(weModelAccount);
						m_friendList.add(player);
					}
				}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章