将 JSONObject 映射到 Java 对象
Posted
技术标签:
【中文标题】将 JSONObject 映射到 Java 对象【英文标题】:Map JSONObject to Java Object 【发布时间】:2021-12-08 21:39:19 【问题描述】:我正在开发一个需要联系 API REST 的 android 应用程序,该 API REST 提供如下结构的 JSON
"TEST1": [
"delegate": true,
"unit": "mmHg",
"code": "DIA",
"read": true,
"write": true
,
"delegate": true,
"unit": "mmHg",
"code": "SYS",
"read": true,
"write": true
],
"TEST2": [
"delegate": true,
"unit": "°C",
"code": "TEMPERATURE",
"read": true,
"write": true
]
现在我想将数组中的内部对象映射为具有 5 个字段的简单 Java 对象(例如 MyObject),但是在进行改造调用时如何映射整个对象?我不这么认为
List<List<MyObject>>
适合这种情况,因为我需要知道键(“TEST1”、“TEST2”)。 任何帮助将不胜感激
【问题讨论】:
你没有List<List<MyObject>>
,因为外层json不是json数组;您很少有 List<MyObject>
的实例按顺序打包在不同的键下。
但是,您并不需要知道键 - TEST1
和 TEST2
都包含相同的元素(列表),因此您只需遍历最外层 JSON 和映射的所有键它们的值为Whatever
,代表List<MyObject>
。然后手动构建那个小部分 - 将这些 Whatever
s 分配给您的 ClassToMap
的字段。
【参考方案1】:
也许最好的选择是将响应映射到 JsonObject 中,然后将值与
JsonArray test1 = jsonObject.getAsJsonArray("TEST1");
您可以使用基于响应长度的计数器来使其更具动态性,例如:
int testCounter = 0;
JsonArray test1 = jsonObject.getAsJsonArray("TEST");
当然是在循环中
【讨论】:
感谢您的回复。我正在遵循这种方式,但即使我期待一个 JSON 对象,服务器也会返回一个带有正文“”的 200 响应,在 Postman 上尝试了相同的 api 它返回在我的问题上写的 json 编辑:我解决了期待JSONElement 而不是直接使用 JSONObject。 JSONElement 可以使用 .getAsJSONObject() “转换”为 JSONObject以上是关于将 JSONObject 映射到 Java 对象的主要内容,如果未能解决你的问题,请参考以下文章
将 Gson 的 JsonObject 保存为没有 Members 对象的纯 Json 到 mongoDB
jsonobject如何获取一个集合里的某个对象所有属性的值