我如何使用Gson来解析保持相同键但不是同一类型的json

时间:2015-05-19 14:27:30

标签: json gson

实际上,我想像这样解析json:

mqttws31.js

}

正如您所看到的,关键"数据"有时是一个字符串,有些是json对象,我应该怎么做才能解析Gson的这个json?

2 个答案:

答案 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,它对我有用!