2015-09-30 88 views
1

我以json字符串的形式得到響應。在響應中,一個字段可能是對象數組或對象的簡單對象 。通過GSON將JSONArray轉換爲自定義對象的ArrayList

類型1.

[{"0":1, "1":"name1", "id":1, "name":"name1"} , {"0":2, "1":"name2", "id":2, "name":"name2"}] 

類型2

{"0":1, "1":"name1", "id":1, "name":"name1"} 

爲了處理這種情況下,我已經創建了兩個模型類一個用於對象的陣列,一個用於單個對象。

有沒有什麼聰明的方法來處理這個問題。

回答

0

這將是我的做法

try { 
     JSONArray jsonArray = new JSONArray(jsonString); 
     for(int i =0; i < jsonArray.length(); i++) 
     { 
      parseToObject(jsonArray.getJSONObject(0));// parse you JSONObject to model object here 
     } 
    } catch (JSONException e) { 
     // it the json is not array it throws exception so you can catch second case here 
     parseToObject(jsonString); 
     e.printStackTrace(); 
    } 
1

確定。所以,你想使用GSON。

首先,進入http://www.jsonschema2pojo.org/並創建相關的一個POJO類。

下面將是模型類:

Example.java

public class Example { 

@SerializedName("0") 
@Expose 
private Integer _0; 
@SerializedName("1") 
@Expose 
private String _1; 
@SerializedName("id") 
@Expose 
private Integer id; 
@SerializedName("name") 
@Expose 
private String name; 

/** 
* 
* @return 
* The _0 
*/ 
public Integer get0() { 
return _0; 
} 

/** 
* 
* @param _0 
* The 0 
*/ 
public void set0(Integer _0) { 
this._0 = _0; 
} 

/** 
* 
* @return 
* The _1 
*/ 
public String get1() { 
return _1; 
} 

/** 
* 
* @param _1 
* The 1 
*/ 
public void set1(String _1) { 
this._1 = _1; 
} 

/** 
* 
* @return 
* The id 
*/ 
public Integer getId() { 
return id; 
} 

/** 
* 
* @param id 
* The id 
*/ 
public void setId(Integer id) { 
this.id = id; 
} 

/** 
* 
* @return 
* The name 
*/ 
public String getName() { 
return name; 
} 

/** 
* 
* @param name 
* The name 
*/ 
public void setName(String name) { 
this.name = name; 
} 

} 

現在,你不需要,如果有響應的JSONArray創建第二個模型類。你可以嘗試以下方法來獲得你的ArrayList<Example>

Type collectionType = new TypeToken<ArrayList<Example>>() {}.getType(); 
ArrayList<Example> tripList = tripListGson.fromJson(YOUR JSON ARRAY STRING HERE, collectionType); 

我希望它能幫助你。