问题是,当我使用 GSON 库解析以下 JSON 时,我会以的形式获得 GSON 类> POJO ,其中每个键和值都有一个getter和setter。
请参阅下面的示例 JSON ,因为 GSON 库未正确解析
现在这不是我要求的格式。相反,我想要一个返回的哈希映射对象(库可以返回ArrayList,然后为什么不返回TreeHashMap?)。对我来说,我不希望GSON解析JSON的这一部分。
我的问题是我应该要求后端团队按照下面第二个 JSON 的格式重新格式化 JSON ,还是尝试使用 GSON 库,但从 JSON 中以编程方式从中提取JSONObject
,因为这些键本质上是动态的,并且不确定其中是否有几个这样的键或其中的数千个键返回的 JSON 。
请参见下面的 good JSON 格式示例,该格式是从我提供的 bad JSON转换而来的,因为< strong> 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将为每个这样的动态密钥进行吸气剂。
应该由网络服务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
”使用一个通用的吸气剂就很有意义。现在,这是 GSON 可以解析为我想要的输出的 JSON 。但事实是,我们的后端团队不合作更改任何东西,因为这里有返工。如果我改用传统解析,那么最终也将需要大量的工作。
或者我必须找出一种方法,可以使用 GSON 从 JSON 中提取JSONObject
,以便可以手动解析它。>
因此,我需要一些节省时间的东西,以便进行这项返工。
答案 0 :(得分:0)
获取未按需由GSON解析的JSONObject后:
Getting JSONObject from JSON where it is not parsable by GSON:
使用keySet()
中的JSONObject
从JSON
获取密钥,作为Set集合。遍历Set中的键,可以在当前JSON
部分中获得相应的值。
请参见示例:
Java Code Examples for org.json.JSONObject.keySet()
现在,如果GSON
无法解析这种JSON
格式,它会为每个键提供getter和setter方法,并且如果开发人员必须手动解析JSON
,那么仍然存在使用此解决方案可以节省时间。但是直到GSON
像您建议的那样进行修改之前,您必须接受此解决方案。
如果我在GSON开发团队中应该怎么做?
应该有另一种注释,它应该能够从GSON
库中以key-value
的形式返回hash-map
对,而不是获取getter和setter。或输出中POJO的array-list
。目前不存在。
快乐编码;-)