【发布时间】:2018-10-11 10:08:19
【问题描述】:
问题是,当我使用 GSON 库解析以下 JSON 时,我得到 GSON 类的 >POJO,其中每个键和值都有一个 getter 和 setter。
请参阅下面的错误 JSON 示例,因为 GSON 库没有正确解析
现在这不是我需要的格式。相反,我想要一个 hashmap 对象作为返回(库可以返回 ArrayList,那么为什么不返回 TreeHashMap?)。对我来说,这部分 JSON 没有按照我的意愿被 GSON 解析。
我的问题是我是否应该要求我的后端团队像下面的第二个 JSON 那样重新格式化 JSON,或者尝试使用 GSON 库,但以编程方式从 JSON 中提取 JSONObject,其中键本质上是动态的,并且不确定是否有几个这样的键,或者在 返回的 JSON。
请参阅下面的 good JSON 格式示例,它是从我提供的 bad JSON 转换而来的,因为它可以很容易地被 GSON 到我想要的格式
为此,要么我必须向我的后端团队解释一条规则:
规则:
键本质上不应是动态的。如果键是动态的,则还应在相同的 JSON 或单独的 MODEL JSON 中定义可搜索键的列表,这应该在此之前的调用中请求 JSON 被解析(在单独的 Web 服务 API 响应中)。
错误 JSON 示例:
{"Grocery": [
{
"id": 2,
"name": "Kirana Store",
"parent_id": 1,
"category_image": "",
"category_type": "product",
"position": 0,
"front_status": 0,
"slug_url": "daal-pulses",
"created_at": "2016-06-27 06:44:59",
"updated_at": "2018-02-13 04:55:33"
},
{
"id": 3,
"name": "Departmental Store",
"parent_id": 1,
"category_image": "",
"category_type": "product",
"position": 0,
"front_status": 0,
"slug_url": "dry-fruits",
"created_at": "2016-06-27 06:45:12",
"updated_at": "2018-02-13 04:56:01"
}
]}
并且可能有数千个动态键,例如“Grocery”,例如“Stationary”、“Hosiery”、“Medicines”等等……作为产品类别。 GSON 将为每个这样的动态键生成 getter。
应由网络服务 API 更正并返回为:
{
"Products": [
{
"parent_category": "Grocery",
"items": [
{
"id": 2,
"name": "Kirana Store",
"parent_id": 1,
"category_image": "",
"category_type": "product",
"position": 0,
"front_status": 0,
"slug_url": "daal-pulses",
"created_at": "2016-06-27 06:44:59",
"updated_at": "2018-02-13 04:55:33"
},
{
"id": 3,
"name": "Departmental Store",
"parent_id": 1,
"category_image": "",
"category_type": "product",
"position": 0,
"front_status": 0,
"slug_url": "dry-fruits",
"created_at": "2016-06-27 06:45:12",
"updated_at": "2018-02-13 04:56:01"
}
]
}
]
}
如上所述,Grocery 可能有数千个类别,并且无法在运行时计算此类键的 getter。但是,如果这些键被转换为值,每个都由一个公共键表示,如上面的更正,那么为该键“parent_category”使用一个公共 getter 是有意义的。现在,这是 GSON 可以解析为我想要的输出的 JSON。但问题是我们的后端团队不合作改变任何东西,因为这里有重新工作。如果我切换到传统的解析,我也会有大量的返工。
或者我必须找到一种方法,可以使用 GSON 从 JSON 中提取 JSONObject,以便手动解析它。
因此,我需要一些东西来节省这次返工的时间。
【问题讨论】: