簡體   English   中英

GSON無法正確解析嵌套的JSON對象

[英]GSON not parsing nested JSON objects properly

我有一些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創建了JSON所需的Java對象類(所有內容都在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是一個單獨的對象)時,代碼返回null。 我一直無法弄清楚,這與GSON的工作方式有關嗎? 還是我在代碼中做錯了什么?

首先,更改:

Location LocationObject;

至:

private Location location;

而且,您可以更輕松地反序列化JSON

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

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

}

看來您的命名不好。 建築類您的位置對象被稱為LocationObject里面的時候你的JSON對象被稱為location

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM