我正在使用Springframework Android rest客户端开发一个与Facebook连接的Android应用程序。
使用此网址:
https://graph.facebook.com/me/friends?access_token=AUTH_TOKEN
Facebook API返回:
{
"data": [
{
"name": "Friend1",
"id": "123456"
}
]
}
我想将data[]
值解析为数组:
[
{
"name": "Friend1",
"id": "123456"
}
]
获得FacebookFriend[]
。
如何使用GSON
?
答案 0 :(得分:2)
首先,你需要一个FacebookFriend
类(使用公共字段而不是简单的getter):
public class FacebookFriend {
public String name;
public String id;
}
如果您创建了一个包装类,例如:
public class JsonResponse {
public List<FacebookFriend> data;
}
生活变得简单得多,你可以做到:
JsonResponse resp = new Gson().fromJson(myJsonString, JsonResponse.class);
完成它。
如果你不想创建一个带有data
字段的封闭类,你可以使用Gson来解析JSON,然后提取数组:
JsonParser p = new JsonParser();
JsonElement e = p.parse(myJsonString);
JsonObject obj = e.getAsJsonObject();
JsonArray ja = obj.get("data").getAsJsonArray();
(显然你可以将所有这些方法联系起来,但我将它们明确地留给了这个演示)
现在您可以使用Gson直接映射到您的班级。
FacebookFriend[] friendArray = new Gson().fromJson(ja, FacebookFriend[].class);
那就是说,老实说最好使用Collection
代替:
Type type = new TypeToken<Collection<FacebookFriend>>(){}.getType();
Collection<FacebookFriend> friendCollection = new Gson().fromJson(ja, type);
答案 1 :(得分:1)
看来,你的数组包含了对象。
您可以通过以下方式解析它。
JsonArray array = jsonObj.get("data").getAsJsonArray();
String[] friendList = new String[array.size()];
// or if you want JsonArray then
JsonArray friendArray = new JsonArray();
for(int i=0 ; i<array.size(); i++){
JsonObject obj = array.get(i).getAsJsonObject();
String name = obj.get("name").getAsString();
friendList[i] = name;
// or if you want JSONArray use it.
friendArray.add(new JsonPrimitive(name));
}