在arraylist中存储JsonElement会导致错误

时间:2016-01-09 15:16:55

标签: java android gson

Gson gson = new Gson();
JsonParser parser = new JsonParser();

JsonElement obj = parser.parse(Tempx.getString("GSON_FEED","")).getAsJsonObject();

for(JsonElement jsx: obj) {
  MainPojo cse = gson.fromJson(jsx, MainPojo.class);
  TweetList.add(cse);
  Log.w("F:", "" + TweetList.get(0).getStatuses().get(0).getScreenName());
}

尝试将JsonObjects存储到ArrayList中,但是在obj

下的行中出现错误

for(JsonElement jsx: obj)

  

foreach不适用于输入'com.google.gson.JsonElement

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以轻松地将JSONArray读入ArrayList所代表的类型类JSONArray。感谢GSON这整个过程可以在一行代码中完成。如下图所示。

ArrayList<MyItem> items2 = (new Gson()).fromJson(result,new TypeToken<ArrayList<MyItem>>() {}.getType());

让我们假设您获得JSONArray类型MyItem以上代码,会将JSONArray转换为ArrayList类型的MyItem

我编写了一个示例代码,您可以获得更好的图片。

import java.util.ArrayList;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class MyTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ArrayList<MyItem> items = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            MyItem item = new MyItem();
            item.setRate("rate_"+i);
            item.setSomeCode("some_"+i);
            items.add(item);
        }

        String result = (new Gson()).toJson(items);

        System.out.println(""+result);

        ArrayList<MyItem> items2 = (new Gson()).fromJson(result,new TypeToken<ArrayList<MyItem>>() {}.getType());

        System.out.println(""+items2.size());
    }
}

class MyItem {
    private String rate;
    private String someCode;

    public String getRate() {
        return rate;
    }

    public void setRate(String rate) {
        this.rate = rate;
    }

    public String getSomeCode() {
        return someCode;
    }

    public void setSomeCode(String someCode) {
        this.someCode = someCode;
    }
}
  

输出

[
  {
    "rate": "rate_0",
    "someCode": "some_0"
  },
  {
    "rate": "rate_1",
    "someCode": "some_1"
  },
  {
    "rate": "rate_2",
    "someCode": "some_2"
  },
  {
    "rate": "rate_3",
    "someCode": "some_3"
  },
  {
    "rate": "rate_4",
    "someCode": "some_4"
  }
]

JSONArray已转换为ArrayList

类型的MyItem

我还就此主题撰写了一些答案,您可以查看有关使用serialization库的de-serializationGSON的更多信息

Example_1

Example_2

Example_3

Example_4