将 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&lt;List&lt;MyObject&gt;&gt;,因为外层json不是json数组;您很少有 List&lt;MyObject&gt; 的实例按顺序打包在不同的键下。 但是,您并不需要知道键 - TEST1TEST2 都包含相同的元素(列表),因此您只需遍历最外层 JSON 和映射的所有键它们的值为Whatever,代表List&lt;MyObject&gt;。然后手动构建那个小部分 - 将这些 Whatevers 分配给您的 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如何获取一个集合里的某个对象所有属性的值

详解JSONObject.parseObject和JSONObject.fromObject——Web网络系列学习笔记

如何将 JSON 映射到 java 模型类

如何将java中的map转换成jsonobject

JSONObject put,accumulate,element的区别