Ⅰ android 解析json用那個包裡面的方法比較好呢
android 解析json還有用Google出品的Gson比較好,具體步驟為:
1、首先,從 code.google.com/p/google-gson/downloads/list下載GsonAPI:
google-gson-1.7.1-release.zip 把gson-1.7.jar 到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();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
2、使用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());
}
3、如果要處理的JSON字元串只包含一個JSON對象,則可以直接使用fromJson獲取一個User對象:
代碼如下:
String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println(user.getUsername());
System.out.println(user.getUserId());
Ⅱ android json解析三種方式哪種效率最高
Android平台下,解析JSON數據的方式多種多樣,包括org.json包、Google提供的gson庫以及阿里巴巴的fastjson庫等。其中,使用gson庫解析JSON數據的方式更為高效。以Gson為例,解析JSON數據的具體步驟如下:
首先,從Google提供的GsonAPI下載地址下載GsonAPI:google-gson-1.7.1-release.zip。將gson-1.7.jar拷貝到項目根目錄新建的libs文件夾中。解析JSON數據時,可以使用JsonReader對象,通過以下代碼實現:
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();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
或者,可以使用Gson對象獲取User對象數據進行相應的操作,代碼如下:
Type listType = new TypeToken>(){}.getType();
Gson gson = new Gson();
LinkedList 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對象,則可以直接使用Gson的fromJson方法獲取一個User對象,代碼如下:
String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println(user.getUsername());
System.out.println(user.getUserId());
這種方式不僅代碼簡潔,而且易於維護和擴展,適用於各種規模的應用程序。
Ⅲ 探索Android開源框架 - 8. Gson使用及源碼解析
深入解析Android開源框架中的Gson使用及其源碼解析,Gson作為java語言的高效JSON轉換庫,以其簡潔的API和高性能的特點,成為Android開發中進行數據序列化和反序列化的首選工具。本文將詳細介紹Gson的使用方法,包括基本的解析與生成、屬性重命名、POJO與JSON的欄位映射規則、泛型的封裝、序列化與反序列化過程,以及如何進行欄位過濾與自定義序列化器和反序列化器的實現。
1. **基本的解析與生成**
使用Gson進行JSON字元串解析時,可以通過Gson對象的fromJson方法將JSON字元串轉換為Java對象,反之,使用toJson方法將Java對象轉換為JSON字元串。
2. **屬性重命名**
通過使用@SerializedName註解,可以方便地在POJO類中重命名JSON欄位,以匹配服務端返回的數據結構,從而避免硬編碼的字元串匹配。
3. **POJO與JSON的欄位映射規則**
Gson通過構建一個映射規則來匹配JSON欄位到POJO類的屬性,確保數據的正確解析與生成。這主要通過類型適配器(TypeAdapter)來實現,使得Gson能夠理解如何處理復雜數據類型,如日期、集合等。
4. **泛型的封裝**
在使用Gson進行序列化和反序列化時,可以通過泛型來保證類型安全,確保不會出現類型轉換錯誤。GsonBuilder提供了一系列方法來實現泛型的封裝,使得API調用更為清晰和明確。
5. **Gson的序列化、反序列化**
通過Gson的API,可以輕松實現Java對象到JSON字元串的序列化,以及從JSON字元串反序列化到Java對象的過程。這使得數據在不同系統間傳輸變得簡單高效。
6. **欄位過濾**
提供了多種方法進行欄位過濾,如使用@Expose註解、基於版本的過濾、訪問修飾符、以及基於策略的自定義過濾規則,以滿足不同的數據處理需求。
7. **TypeAdapter、JsonSerializer與JsonDeserializer**
實戰中,可能需要處理一些特殊的數據類型或復雜邏輯,這時可以通過實現JsonSerializer或JsonDeserializer來自定義序列化和反序列化過程。TypeAdapter則可以用於處理復雜類型的序列化。
8. **實戰TypeAdapterFactory**
在某些場景下,可以通過實現TypeAdapterFactory來創建自定義的TypeAdapter,從而實現更為靈活的數據處理邏輯。
9. **@JsonAdapter註解**
用於指定自定義的序列化器或反序列化器,簡化了實現自定義序列化邏輯的步驟,使得代碼更為簡潔和易讀。
10. **源碼解析**
通過深入源碼分析,可以更好地理解Gson內部的實現機制,如fromJson方法如何獲取適配器、getAdapter方法如何選擇適配器、Gson的構造方法如何初始化適配器列表,以及如何通過反射機制創建綁定欄位等關鍵邏輯。這不僅有助於解決實際開發中的問題,還能加深對Gson工作的理解,為後續的優化和定製提供基礎。
Ⅳ net.sf.json.JSONObject與Android自帶的JSON解析類沖突怎麼辦
在Android中,由於類名相同,可能造成沖突,解決方案:
盡量使用同一個庫下的JSON解析工具。
如果類型相同,但是包名不同,建議使用完整的包名+類名定義變數,例如java中,java.sql.Date和java.uitl.Date兩個都是Date類,但是怎麼區分呢,就可以通過包名+類名來區分:
java.sql.Date date1 = new java.sql.Date();
java uitl.Date date2 = new java.uitl.Date();
JSONObject也一樣,可以使用這種方式。
Android中,json的解析,建議使用google提供的Gson這個開源庫,json的解析或者對象與json轉換,只需要一行代碼。
Gson gson = new Gson();
gson.toJson(object); gson.fromJson(json.Object.class);