如何使用GSON在JSON响应中动态查找对象数组的末尾?

kwvwclae  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(192)

我正在处理一个给定的JSON响应。我使用的API提供如下响应:

{
 "data":[
  { 
    "sample-value": "sample"
  }
  {
    "sample-value": "sample"
  }
  { 
    "sample-value": "sample"
  }
  {
    "sample-value": "sample"
  }
 ],
    "meta": {
        "current-page": 1,
        "next-page": 2,
        "prev-page": null,
        "total-pages": 5,
        "total-count": 4338,
        "filters": {}
    },
"links": {

        "self": "linktothisquery",
        "next": "linktonextquery",
        "last": "linktolastpagequery"
    }
}

如您所见,提供的响应包含我解释为1个对象数组的内容(大小根据查询的内容而变化)和2个对象。(data是数组, meta和links是对象)我遇到过一种情况,我需要运行多个请求来获得项目所需的全部数据。我尝试通过迭代请求来解决这个问题。但是由于每个请求的响应长度不同,我不能使用相同的逻辑来定位***响应中的数组***,因此最终会出现意外字符,使GSON无法解析。()并手动输入我希望GSON解析的响应中的位置。基本上,我希望GSON只看到“data”数组,而忽略其他所有内容。我的项目中有模型类来序列化数据,但它们是围绕前面提到的数组内部的对象而不是数组本身构建的。

brtdzjyr

brtdzjyr1#

您发布JSON无效在数据数组中,两个对象之间缺少comma它应该是

{ 
    "sample-value": "sample"
},
{
    "sample-value": "sample"
}

现在如果你只需要数据数组部分,你可以使用JsonParser手动解析它。这将是最简单的方法。

String json = "{\"data\":[{\"sample-value\":\"sample\"},{\"sample-value\":\"sample\"},{\"sample-value\":\"sample\"},{\"sample-value\":\"sample\"}],\"meta\":{\"current-page\":1,\"next-page\":2,\"prev-page\":null,\"total-pages\":5,\"total-count\":4338,\"filters\":{}},\"links\":{\"self\":\"linktothisquery\",\"next\":\"linktonextquery\",\"last\":\"linktolastpagequery\"}}";

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();       
JsonArray jsonArray =  jsonObject.get("data").getAsJsonArray();

jsonArray.forEach(System.out::println);

输出量:

{"sample-value":"sample"}
{"sample-value":"sample"}
{"sample-value":"sample"}
{"sample-value":"sample"}

相关问题