Используя gson, как бы вы получили доступ к значениям в массиве LeagueTable в этом json?
Вот структура json, которая хранится в виде строки с именем «dataRead».
{
"data":{
"fixtures":[
{
}
],
"leagueTable":[
{
}
]
}
}
Мой код gson выглядит так, а строка печати предназначена для доступа к объекту в массиве.
Data data = new Gson().fromJson(dataRead, Data.class);
System.out.println(data.leagueTable[0].team);
Мой класс данных выглядит так и соответствует тому, что в json
public class Data {
LeagueTable[] leagueTable;
public Data(LeagueTable[] leagueTable) {
this.leagueTable = leagueTable;
}
public static class LeagueTable {
String team;
int played, gamesWon, gamesDraw, gameLost, goalsFor, goalsAgainst, goalsDifference, points;
public LeagueTable(String team, int played, int gamesWon, int gamesDraw, int gameLost, int goalsFor,
int goalsAgainst, int goalsDifference, int points) {
this.team = team;
this.played = played;
this.gamesWon = gamesWon;
this.gamesDraw = gamesDraw;
this.gameLost = gameLost;
this.goalsFor = goalsFor;
this.goalsAgainst = goalsAgainst;
this.goalsDifference = goalsDifference;
this.points = points;
}
}
}
Я ожидаю строку первой команды в массиве LeagueTable, но получаю следующее сообщение:
Exception in thread "main" java.lang.NullPointerException
Где трассировка стека говорит, что происходит NPE, если вы разделите строку System.out.println на три отдельные строки? Например. 1 строка data, 2 строка .leagueTable[0], 3 строка .team? Это скажет вам, какая часть объекта не десериализуется.
@spork Я поместил данные в строку печати, и это дало мне: dawfl.Data@5056dfcb (dawfl — мой пакет) System.out.println(data.leagueTable[0]); дает мне NPE
@ jmcveigh15 Вам может понадобиться конструктор по умолчанию в LeagueTable. Не могли бы вы добавить один и посмотреть, очистит ли это NPE?




Ваша структура данных, представленная Data, не соответствует вашей структуре json. Поэтому Gson только создает новый экземпляр типа Data, но не заполняет его значениями участников.
Попробуйте эту реализацию:
public class MyObject {
private Data data;
public static class Data {
private FixturesStrutue[] fixtures;
private LeagueTable[] leagueTable;
public static class LeagueTable {
String team;
int played, gamesWon, gamesDraw, gameLost, goalsFor, goalsAgainst,
goalsDifference, points;
}
public static class FixturesStrutue {
String member1;
int member2;
}
}
}
Теперь используйте Gson:
Data data = new Gson().fromJson(dataRead, MyObject.class);
System.out.println(data.leagueTable[0].team);
Последняя строка (data.leagueTable[0].team) по-прежнему будет выдавать NPE, потому что у вас нет элементов в массиве leagueTable в json. Добавьте в него хотя бы один элемент и все будет в порядке.
Gson внедрит все свойства из json в соответствующие члены класса по имени. Если вы хотите, чтобы член и свойство имели разные имена, прочитайте о СериализованноеИмя.
Или stackoverflow.com/questions/12004338/…