GSON неправильно анализирует вложенные объекты JSON - PullRequest
0 голосов
/ 03 марта 2019

У меня есть некоторые данные в форме JSON, и я использовал библиотеку GSON для анализа их в объект Java, который будет использоваться в последующих частях кода.JSON имеет вложенные объекты, которые, кажется, не анализируются должным образом, и я не могу понять, почему, поскольку внешний объект конвертируется по желанию.Вот пример данных JSON, на которые я смотрю:

{  
   "title":"Emergency Services Headquarters",
   "description":"",
   "cid":"C70856",
   "building_id":"4714",
   "building_number":"3542",
   "campus_code":"20",
   "campus_name":"Busch",
   "location":{  
      "name":"Emergency Services Headquarters",
      "street":"129 DAVIDSON ROAD",
      "additional":"",
      "city":"Piscataway",
      "state":"New Jersey",
      "state_abbr":"NJ",
      "postal_code":"08854-8064",
      "country":"United States",
      "country_abbr":"US",
      "latitude":"40.526306",
      "longitude":"-74.461470"
   },
   "offices":[  
      "Emergency Services"
   ]
}

Я использовал codebeautify для создания классов объектов Java, необходимых для JSON (все находится внутри Building.java):

public class Building {
    private String title;
    private String description;
    private String cid;
    private String building_id;
    private String building_number;
    private String campus_code;
    private String campus_name;
    Location LocationObject;
    ArrayList < Object > offices = new ArrayList < Object > ();

    //Setters and getters have been omitted

}

class Location {
    private String name;
    private String street;
    private String additional;
    private String city;
    private String state;
    private String state_abbr;
    private String postal_code;
    private String country;
    private String country_abbr;
    private String latitude;
    private String longitude;

    //Setters and getters have been omitted
}

Вот код, который я использую для анализа JSON, где переменная json является входным параметром для метода:

Gson obj = new Gson();
JsonArray buildingsArray = new JsonArray();
JsonParser parser = new JsonParser();
JsonElement jsonElement = parser.parse(json);
buildingsArray = jsonElement.getAsJsonArray();
for (int i = 0; i < buildingsArray.size(); i++)
    Building building = obj.fromJson(buildingsArray.get(i), Building.class);

Когда я вызываю такие методы, как building.getTitle () илиbuilding.getCid (), я получаю соответствующие значения, однако, когда я делаю building.getLocation () (где Location - отдельный объект), код возвращает ноль.Я не смог понять это, это проблема с тем, как работает GSON?Или я что-то не так делаю в своем коде?

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Имя свойства Json должно соответствовать свойствам вашего класса POJO, оно должно быть location, а не LocationObject

public class Building {
private String title;
private String description;
private String cid;
private String building_id;
private String building_number;
private String campus_code;
private String campus_name;
Location location;
ArrayList < Object > offices = new ArrayList < Object > ();

//Setters and getters have been omitted

}
0 голосов
/ 03 марта 2019

Кажется, у вас плохое наименование.Ваш объект местоположения в классе Building называется LocationObject, когда ваш объект внутри JSON называется location.

0 голосов
/ 03 марта 2019

Прежде всего, измените:

Location LocationObject;

на:

private Location location;

И вы можете десериализовать JSON намного проще:

Gson gson = new GsonBuilder().create();
Building building = gson.fromJson(json, Building.class);
...