【问题标题】:Parse a JSON object value (an Array), not the object解析 JSON 对象值(数组),而不是对象
【发布时间】:2013-07-01 12:32:14
【问题描述】:

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

【问题讨论】:

  • 再次投反对票,不要说为什么。很有启发性。

标签: android facebook spring gson


【解决方案1】:

首先,您需要一个 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); 

【讨论】:

    【解决方案2】:

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

    您可以通过以下方式解析它。

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

    【讨论】:

    • 感谢您的回答。我已经用更多细节更改了我的问题。
    • 我不明白你的意思。如果我没记错的话,你想将 data[] 值添加到另一个数组中吗?
    • 我想获取 data[] 值并将它们解析为数组。我又更新了我的问题。
    • 如果您需要 Java 数组或 JsonArray,我会针对这两种情况更新我的答案。
    猜你喜欢
    • 2011-10-29
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多