【问题标题】:GSON not parsing nested JSON objects properlyGSON 没有正确解析嵌套的 JSON 对象
【发布时间】:2019-03-03 20:00:02
【问题描述】:

我有一些 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 工作方式的问题吗?还是我在代码中做错了什么?

【问题讨论】:

    标签: java android json parsing gson


    【解决方案1】:

    首先,改变:

    Location LocationObject;
    

    到:

    private Location location;
    

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

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

    【讨论】:

    • 谢谢!应该已经看到了,我检查了其他属性,但不知何故忽略了这个 smh
    【解决方案2】:

    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
    
    }
    

    【讨论】:

    • 当然会是这么小的东西。我很沮丧,我忽略了这一点,谢谢!
    【解决方案3】:

    看来你的名字不好。当您在 JSON 中的对象称为 location 时,您在 Building 类中的位置对象称为 LocationObject

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多