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 的结构及其所有层次结构。
非常感谢您的帮助!
我需要反序列化一个属性名称未知的动态 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 的结构及其所有层次结构。
非常感谢您的帮助!