Android:使用Retrofit和Jackson反序列化动态JSON

时间:2015-05-16 09:23:19

标签: java android json jackson json-deserialization

我需要对具有未知属性名称的动态JSON进行反序列化,但我无法完成它。

JSON看起来像这样:

{     球员:[       {         名称:"名称",         姓:"姓",         电子邮件:"电子邮件",         照片:"照片",         位置:"位置"       }     ] ...   } 所以基本上,这将是一个包含多个数组的JSON对象。

JSON数组的名称-Player-是动态的,我刚刚包含了第一个数组,但在JSON对象中可以有多个数组。 否则,如果不是动态的,那么我会将它包含在带有@JsonProperty的模型字段的声明中。

提前多多感谢。

1 个答案:

答案 0 :(得分:1)

我在这里做的是创建自己的反序列化器并在创建Gson时使用它:

Gson gson = new GsonBuilder().registerTypeAdapter(MyModel.class,
            new MyJsonDeserializer())
            .create();

这是解串器:

public class MyJsonDeserializer implements JsonDeserializer<MyModel> {
@Override
public MyModel deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    Gson gson = new GsonBuilder().create();
    MyModel myModel = new MyModel();
    Iterator it = ((JsonObject) json).entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry entry = (Map.Entry) it.next();
        if (entry.getValue() instanceof JsonArray) {
            JsonArray myModelJsonArray = (JsonArray) entry.getValue();
            MyModel2 mymodel2 = new MyModel2();
            if (entry.getKey() instanceof String) {
                mymodel2.setName((String) entry.getKey());
            }
            for (int i = 0; i < myModelJsonArray.size(); i++) {
                JsonElement jsonElementMember = myModelJsonArray.get(i);
                mymodel2.getMembers().add(gson.fromJson(jsonElementMember, Member.class));
            }
            myModel.getMyModel2().add(myModel2);
        }
    }
    return myModel;
}

}

它基本上是手动创建JSON的结构,包含所有层次结构。

非常感谢你的帮助!