2013-07-01 85 views
-2

我正在开发一个Android应用程序,使用Springframework Android休息客户端连接Facebook。解析一个JSON对象值(一个数组),而不是对象

有了这个网址:

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

再次downvoting,不说为什么。非常具有启发性。 – VansFannel

回答

2

首先,你需要一个FacebookFriend类(使用公共领域,为简单起见,没有干将):

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

看来,你的数组包含对象。

你可以用下面的方法解析它。

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

    } 
+0

感谢您的回答。我用更多的细节改变了我的问题。 – VansFannel

+0

我不明白你的观点。如果我没有错,你想添加数据[]值到另一个数组? –

+0

我想获取data []值,并将它们解析为一个数组。我再次更新了我的问题。 – VansFannel

相关问题