gpt4 book ai didi

android - 使用 gson 反序列化包含单个列表的对象

转载 作者:太空狗 更新时间:2023-10-29 15:01:09 24 4
gpt4 key购买 nike

我有以下要反序列化的 json:

{
"locations": [{
"id": 17,
"account_id": 11,
"name": "The Haunted Lexington",
"radius": 100
}]
}

(在此特定实例中,只有一个 Location,但可以有多个)。

我使用带有以下代码的 Gson 对其进行反序列化:

Gson gson = new GsonBuilder().create();
LocationList ll = gson.fromJson(jsonString, LocationList.class);

我定义了以下类:

public class Location {

@SerializedName("id")
private long mId;

@SerializedName("account_id")
private long mAccountId;

@SerializedName("name")
private String mName;

@SerializedName("radius")
private int mRadius;

public long getId() {
return mId;
}

public String getName() {
return mName;
}
}

和:

public class LocationList {
@SerializedName("locations")
private List<Location> mLocations;
}

问题是,我有一堆这样的“虚拟”类,它们包含一个对象,该对象是其他对象的列表(例如 UserListMessageList 等。 ..)

我想做的是以某种方式解析上面的 json,这样我就可以跳过定义 LocationList 的中间类定义,如下所示:

Gson gson = new GsonBuilder().create();

// Use the same json as above, but skip defining the superfluous "LocationList" class
List<Location> ll = gson.fromJson(jsonString, "locations", ArrayList<Location>.class);

有没有办法可以做到这一点,也许是通过提供自定义反序列化器?

最佳答案

我前不久遇到过类似的问题,是这样解决的

// Parse the JSON response.
JSONArray jsonArray = new JSONArray(response);

List<Location> locations = new ArrayList<Location>();

/*
* Create a Location object for every JSONObject in the response,
* and add it to the list.
*/
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);

Location location = new Gson().fromJson(jsonObject.toString(),
Location.class);
locations.add(location);

这里的做法是循环遍历JSON中locations数组中的每一个Location,将它们一个一个地提取出来,然后添加到一个列表中。

我使用的 JSON 有一个列表作为根对象,所以你可能不能使用这个 JSONArray jsonArray = new JSONArray(response);。这样的事情可能更适合你的情况

JSONObject jsonObject = new JSONObject(jsonString);
JSONArray locationsJsonArray = jsonObject.get("locations");

我没有测试最后两行,但我想你明白了。

我希望你能用它来解决你的问题。

关于android - 使用 gson 反序列化包含单个列表的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26639602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com