-2

我正在开发一个使用 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

4

2 回答 2

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);

也就是说,老实说,最好使用 aCollection代替:

Type type = new TypeToken<Collection<FacebookFriend>>(){}.getType();
Collection<FacebookFriend> friendCollection = new Gson().fromJson(ja, type); 
于 2013-07-02T13:08:21.280 回答
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));

    }
于 2013-07-01T12:50:43.280 回答