java - 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 question更改上面的答案以处理 JSON 数组。
推荐阅读
- angular - Angular 4 [routerLink] 无法识别的表达式:
- php - 为什么 Google Invisible recaptcha 没有回应?
- python - python:带参数的函数并收集输入然后打印返回值
- c - 如何在c编程中获取字符串中搜索字符串前面的下一个数字
- php - 如何使用特定引导 4 卡的内容更新 sql 中的特定行?
- webrtc - 是否可以同时录制和语音到网络中的文本?
- angular5 - 如何将类添加到 *ngFor 中的特定选定 li 元素
- php - 为什么从 utf8 更改为 utf8mb4 会减慢我的数据库速度?
- javascript - jQuery 同位素过滤添加 baguetteBox
- qt - 用于绘图表盘、条形图和其他对象的 Qt 附加库?