我有个问题,但我觉得很难表达出来。我从mqtt接收字节[]中的消息,将其转换为字符串,然后将结果发送给gson,gson创建一个 JenkinsMqttObject
.
String messageToString = message.getPayload().toString();
JenkinsMqttObject monobjet = gson.fromJson(messageToString, JenkinsMqttObject.class);
在示例代码中, JenkinsMqttObject
非常简单。我遇到的问题如下:
mqtt向我发送一个对象,该对象可以是:
“{”value1“:20,”value2“:40}
但也可能是:
“{”value1“:20,”value2“:40,”value3“:60}
因此,根据具体情况,我会收到一个包含2或3个属性的对象。问题是我创建了如下java模型:
jenkinsmqttobject.class类
private String value1;
private String value2;
private String value3;
//getter & setters...
问题是,我在gson上说,接收的对象是jenkinsmqttobject类型的,但它并不总是正确的!
所以我完全不知道,如何在java中接收一个对象,这个对象可以对应于或者不对应于一个模型。
谢谢你的帮助!
3条答案
按热度按时间e3bfsja21#
正如rld的回答所暗示的,
Map
是一条路要走。你可以用
TypeToken
但您也可以声明一个特定的类,以避免使用前面提到的方法,并使解析更加简单,因此可以直接将其解析到Map中:我也不认为如果你把
byte[].toString()
它将生成有效的json,但会构造一个新的jsonString
来自byte[]
将工作:那就是:
anhgbhbe2#
如评论中所述
value3
在json中丢失,gson
将设置value3
至null
在JenkinsMqttObject
示例。从gson
文件(重点):此实现正确处理空值。
序列化时,输出中省略空字段。
反序列化时,json中缺少的条目会导致将对象中的相应字段设置为其默认值:对象类型为null,数值类型为零,布尔值为false。
bmvo0sr53#
您应该为您的模型类使用map或hashmap。它应该类似于下面给出的类。
你必须修改主代码如下。
现在,如果您想访问任何值,可以按以下方式访问它。