【发布时间】:2021-05-13 06:43:55
【问题描述】:
我正在尝试使用 Gson 解析嵌套的 JSON 数组并在 recyclerview 中显示该数组。我解析 JSON 数组的方式对我来说似乎不太好/不合适,但它可以完成这项工作。但是我想知道如何正确处理这种情况。
示例 JSONArray
{
"Status":"success",
"Response":[
{
"Title":"First Title",
"Code":"20210209",
"Content":[
{
"field_1":"field_1_text",
"field_2":true
},
{
"field_1":"field_1_text",
"field_2":true
}
]
},
{
"Title":"Second Title",
"Code":"2021020902",
"Content":[
{
"field_1":"field_1_text_2",
"field_2":true
},
{
"field_1":"field_1_text_2",
"field_2":false
}
]
}
]
}
使用 Gson 解析(仅关注 Response 数组):
List<ResponseArrayObject> responseList = new ArrayList<>();
Type listType = new TypeToken<ArrayList<ResponseArrayObject>>(){}.getType();
responseList.addAll(new Gson().fromJson(response.toString(), listType));
到此为止,我正在一个主列表中解析完整的ResponseArray。在此之后,我使用 Getter/Setter 创建了一个新的 List of different objecttype 并遍历 responseList,如果 Content.size() 大于 0,我将执行以下操作。
for(ResponseArrayObject responseO:responseList){
if(responseO.Content.size()>0){
CustomResponseList.add(new CustomerResponse(responseO.Title,null));
for(Response.Content c:responseO.Content){
CustomResponseList.add(new CustomerResponse(null,c));
}
}
}
这样我得到一个包含不同类型数据的列表,即
[
{
"Title" : "First Title",
"Content" : null;
},{
"Title" : null,
"Content" : {
"field_1": "field_1_text",
"field_2": true
},
{
"Title" : "null",
"Content" : {
"field_1": "field_1_text",
"field_2": true
},{
"Title" : "Second Title",
"Content" : null;
},{
"Title" : "null",
"Content" : {
"field_1": "field_1_text_2",
"field_2": true
},
{
"Title" : "null",
"Content" : {
"field_1": "field_1_text_2",
"field_2": true
}
}
]
现在这是一个带有nested OBJECT 的简单数组,我可以在recycerlview adapter 中简单地迭代这个数组,没有任何问题,并使用不同的布局配置based on null value。
但我觉得这不是正确的方法。请有人调查一下并告诉我如何正确地做到这一点。
这里的很多链接基本上都是解析嵌套数组,我可以很容易地做到这一点,但没有人谈论如何在 Recyclerview 适配器中使用解析的嵌套数组。
【问题讨论】:
-
在您的情况下,
POJO模型不适合JSON有效负载。看看similar question,我在这里展示了如何使用在线工具:jsonschema2pojo.org。在您的情况下,也取消选中:Include getters and setters选项。它将为根JSON Object生成一个包装类,其中包含Response字段。 -
是的@MichałZiober,可能是模型不适合 JSON 有效负载,因为我在 SO 中将其写下来以供参考和理解。但我的主要问题是如何在 recyclerview 适配器中使用格式良好且解析良好的嵌套数组。
标签: java android arrays json android-recyclerview