解析JSON对象值(数组),而不是对象

时间:2013-07-01 12:32:15

标签: android facebook spring gson

我正在使用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

2 个答案:

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

    }