我需要对具有未知属性名称的动态JSON进行反序列化,但我无法完成它。
JSON看起来像这样:
{ 球员:[ { 名称:"名称", 姓:"姓", 电子邮件:"电子邮件", 照片:"照片", 位置:"位置" } ] ... } 所以基本上,这将是一个包含多个数组的JSON对象。
JSON数组的名称-Player-是动态的,我刚刚包含了第一个数组,但在JSON对象中可以有多个数组。 否则,如果不是动态的,那么我会将它包含在带有@JsonProperty的模型字段的声明中。
提前多多感谢。
答案 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的结构,包含所有层次结构。
非常感谢你的帮助!