3
votes

GSON n'analyse pas correctement les objets JSON imbriqués

J'ai des données sous forme de JSON, et j'utilisais la bibliothèque GSON pour les analyser en un objet Java à utiliser dans les parties ultérieures du code. Le JSON a des objets imbriqués, qui ne semblent pas être analysés correctement, et je ne peux pas comprendre pourquoi, car l'objet externe est converti comme vous le souhaitez. Voici un exemple des données JSON que je regarde:

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);

J'ai utilisé codebeautify pour créer les classes d'objets Java requises pour le JSON (tout est dans Building.java): p >

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
}

Voici le code que j'utilise pour analyser le JSON, où la variable json est un paramètre d'entrée pour la méthode:

{  
   "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"
   ]
}

Quand j'appelle des méthodes telles que building.getTitle () ou building.getCid (), j'obtiens les valeurs appropriées, cependant quand je fais building.getLocation () (où Location est un objet séparé), le code renvoie null. Je n'ai pas été en mesure de le comprendre, est-ce un problème avec le fonctionnement de GSON? Ou est-ce que je fais quelque chose de mal dans mon code?


0 commentaires

3 Réponses :


4
votes

Tout d'abord, remplacez:

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

par:

private Location location;

Et, vous pouvez désérialiser JSON beaucoup plus simple:

Location LocationObject;


1 commentaires

Merci! J'aurais dû voir ça, j'ai vérifié les autres propriétés mais j'ai ignoré celle-ci smh



3
votes

Le nom de la propriété Json doit correspondre aux propriétés de votre classe POJO, il doit être location et non 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

}


1 commentaires

Bien sûr, ce serait quelque chose de si petit smh. Je suis contrarié d'avoir oublié cela, merci!



2
votes

Il semble que vous ayez une mauvaise dénomination. Votre objet de localisation dans la classe Building est appelé LocationObject lorsque votre objet dans JSON est appelé location .


0 commentaires