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

Android: deserialize dynamic JSON with Retrofit and Jackson

我需要反序列化一个属性名称未知的动态 JSON,但我无法完成它。

JSON 看起来像这样:

{ 玩家:[ { 姓名:"name", 姓氏:"surname", 电子邮件:"email", 照片:"photo", 位置:"position" } ], ... } 所以基本上,这将是一个包含多个数组的 JSON 对象。

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

非常感谢。

我在这里所做的是创建我自己的反序列化器并在创建 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 的结构及其所有层次结构。

非常感谢您的帮助!