Дооснащение 2.0 вложенным JSON с различными подтипами - PullRequest
1 голос
/ 21 марта 2019

Я использую модификацию 2.0 и gson для преобразования json в pojo.Я получил следующий объект json

{
"type": "champion",
"format": "standAloneComplex",
"version": "9.6.1",
"data": {
    "Aatrox": {...},
    "Ahri": {...},
     ...       
} }

Моя проблема в том, что внутри данных каждая запись является новым классом (это тот же класс, но с другим именем)

я могу получить доступ к каждому классу отдельно

public class Champions {

@SerializedName("type")
@Expose
public String type;
@SerializedName("format")
@Expose
public String format;
@SerializedName("version")
@Expose
public String version;
@SerializedName("data")
@Expose
public Data data;

это работает

public class Data {
@SerializedName("Aatrox")
@Expose
public Champion aatrox;
@SerializedName("Ahri")
@Expose
public Champion ahri;}

но

public class Data {
publc List<Champion> champions = new ArrayList<>();

не

как я могу получить все записи в списке?

Я пытался вставить List<Champion> в Data, но я не знаю, что ввести @SerializedName.

Есть предложения, как извлечь List<Champion> из данных?

сайт, с которого я получаю JSON, http://ddragon.leagueoflegends.com/cdn/9.6.1/data/en_US/champion.json

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

установите свой data тип переменной Map<String, Champion> вместо того, чтобы установить object или List и добавьте нижеприведенный метод получения в свою модель для получения List<Champion>

public List<Champion> getChampions(){
    if(data != null){
        return new ArrayList<Value>(data.values());
    }
    return null; // you can set return new ArrayList<>(); to avoid null exception 
}
0 голосов
/ 21 марта 2019

Я использовал код как в моем проекте.Может быть, это будет работать.Устроить самостоятельно.

 Map<String, Champion> championList;
 List<String> keyset = new ArrayList<>(championList.keySet());
 List<String> values = new ArrayList<>(championList.values());

  for (int i = 0; i < values.size(); i++) {
                        NewItem item = new NewItem(values.get(i), keyset.get(i));}
...