2015-05-16 2 views
0

Мне нужно десериализовать динамический JSON с неизвестным именем свойств, и я не могу это сделать.Android: десериализовать динамический JSON с дооснащением и Jackson

JSON выглядит следующим образом:

{ игрока: [ { имя: "Имя", фамилия: "фамилия", адрес электронной почты: "электронная почта", фото: "фото", позиция: «позиция» } ], ... } Таким образом, в основном это был бы объект JSON, содержащий несколько массивов.

Имя имени массива JSON -Player- является динамическим, и я только что включил первый массив, но в объекте JSON могут быть несколько массивов. В противном случае, если он не был динамическим, я бы включил его в объявление полей модели с помощью @JsonProperty.

Большое спасибо.

+1

это поможет http://www.cowtowncoder.com/blog/archives/2011/07/entry_458.html – Hector

+0

@Hector, но если тогда я смогу правильно построить модель, если я это сделаю? – noloman

+0

вы не можете построить модель для динамического json, вам нужно использовать что-то вроде AnySetter для этого, чтобы работать или говорить, подход Jackson TreeNode – Hector

ответ

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 вручную, со всеми ее иерархиями.

Большое спасибо за помощь!

Смежные вопросы