Gson HTTP 响应对象

克里斯·西蒙斯

我第一次使用 Gson 库。我正在发出 HTTP 请求并拉取响应(JSON 响应)并且需要拉取特定结果。

StringBuilder response;
try (BufferedReader in = new BufferedReader( new InputStreamReader(connection.getInputStream()))) {
    String line;
    response = new StringBuilder();
    while((line = in.readLine()) != null) {
        response.append(line);
    }
}

Gson gson = new GsonBuilder()
                .setPrettyPrinting()
                .create();
System.out.println(gson.toJson(response));

响应如下所示,我只需要拉cardBackId

[{\"cardBackId\":\"0\",\"name\":\"Classic\",\"description\":\"The only card back you\u0027ll ever need.\",\"source\":\"startup\",\"sourceDescription\":\"Default\",\"enabled\":true,\"img\":\"http://wow.zamimg.com/images/hearthstone/backs/original/Card_Back_Default.png\",\"imgAnimated\":\"http://wow.zamimg.com/images/hearthstone/backs/animated/Card_Back_Default.gif\",\"sortCategory\":\"1\",\"sortOrder\":\"1\",\"locale\":\"enUS\"
杰森

您可以使用JSONPath(这是一个用于选择 JSON 对象部分的 Java 库)从字符串中提取您需要的部分。

或者,您可以编写一个仅包含所需字段的类:

public class CardBackIdResponse {
    public int cardBackId;
}

然后使用 Gson 将 JSON 解组到您的对象中:

CardBackIdResponse[] cardBackIdResponses = gson.fromJson(response.toString(), CardBackIdResponse[].class);
System.out.println("cardBackId = " + cardBackIdResponses[0].cardBackId);

当从 JSON 解组对象时,如果 Gson 无法在对象中找到一个字段来填充来自 JSON 的值,它只会丢弃该值。这就是我们在这里可以使用的原则。

编辑:根据此 SO 问题更改上面的答案以处理 JSON 数组

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章