实际上,我想像这样解析json:
mqttws31.js
}
正如您所看到的,关键"数据"有时是一个字符串,有些是json对象,我应该怎么做才能解析Gson的这个json?
答案 0 :(得分:0)
我这样做的方法是反序列化两次。首先进入仅定义urn:foo
。
type
在第一次反序列化之后,您可以阅读class TypeObject {
public String type;
}
,并发现哪个是您应该反序列化的真实目标对象。
显然反序列化两次并不理想,但这是使用静态语言对列表中的非统一对象反序列化JSON字符串的不幸性质。
答案 1 :(得分:0)
我找到了json的解析方式,如Alexis C所说,我定制了一个解串器,就像那样
@Override
public MessageDiv deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
MessageDiv messageDiv = new MessageDiv();
JsonObject obj = jsonElement.getAsJsonObject();
String msgtype = obj.get("type").getAsString();
messageDiv.setType(msgtype);
if (msgtype.equals("text")) {
messageDiv.setContent(obj.get("data").getAsString());
} else {
JsonObject imgObj = obj.get("data").getAsJsonObject();
DivData dd = new DivData();
dd.setAttachment(imgObj.get("attachment").getAsString());
dd.setHeight(imgObj.get("height").getAsInt());
dd.setWidth(imgObj.get("width").getAsInt());
messageDiv.setData(dd);
}
return messageDiv;
}
关于如何自定义反序列化器,点击here,它对我有用!