通过GSON将JSONArray转换为自定义对象的ArrayList

时间:2015-09-30 07:16:54

标签: android json gson

我以json string的形式得到响应。在响应中,一个字段可以是对象数组或简单对象 例如。

类型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"}

为了处理这种情况,我创建了两个模型类,一个用于对象数组,另一个用于单个对象。

有没有聪明的方法来解决这个问题。

2 个答案:

答案 0 :(得分:1)

确定。所以,你想要使用GSON。

首先,转到http://www.jsonschema2pojo.org/并创建一个相关的POJO类。

以下是Model Class:

<强> 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,则不需要创建第二个Model类。您可以尝试以下方式获取ArrayList<Example>

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

我希望它会帮助你。

答案 1 :(得分: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();
    }