4

我正在尝试使用 gson 反序列化来自 JSON 对象的数据。我在 1) 设计课程时遇到了麻烦。2) 从内部列表对象中获取一个空对象。

这是 JSON 对象的示例

{
  "spatialReference" : {
    "wkid" : 102113
  },
  "candidates" : [
    {
      "address" : "202 S Van Ness Ave, San Francisco, CA, 94110",
      "location" : {
        "x" : -13627444.2697,
        "y" : 4546249.2471000031
      },
      "score" : 85.969999999999999,
      "attributes" : {
        "Loc_name" : "US_RoofTop",
        "Score" : 85.969999999999999,
        "Match_addr" : "505 S Van Ness Ave, San Francisco, CA, 94110",
        "House" : "505",
        "Side" : "R",
        "PreDir" : "S",
        "PreType" : "",
        "StreetName" : "Van Ness",
        "SufType" : "Ave",
        "SufDir" : "",
        "City" : "San Francisco",
        "State" : "CA",
        "ZIP" : "94110",
        "X" : -122.417416,
        "Y" : 37.764772999999998,
        "Disp_Lon" : -122.416991,
        "Disp_Lat" : 37.764809999999997,
        "Addr_type" : "StreetAddress",
        "Province" : "",
        "Postal" : "",
        "FromAddr" : "",
        "ToAddr" : "",
        "ZIP4" : "",
        "ZIP4_TYPE" : "",
        "User_fld" : "",
        "Ldu" : "",
        "xmin" : 0,
        "xmax" : 0,
        "ymin" : 0,
        "ymax" : 0
      }
    },
    {
      "address" : "505 Van Ness Ave, San Francisco, CA, 94102",
      "location" : {
        "x" : -13627778.172800001,
        "y" : 4548412.0926000029
      },
      "score" : 100,
      "attributes" : {
        "Loc_name" : "US_Streets",
        "Score" : 100,
        "Match_addr" : "505 Van Ness Ave, San Francisco, CA, 94102",
        "House" : "",
        "Side" : "L",
        "PreDir" : "",
        "PreType" : "",
        "StreetName" : "Van Ness",
        "SufType" : "Ave",
        "SufDir" : "",
        "City" : "San Francisco",
        "State" : "CA",
        "ZIP" : "94102",
        "X" : -122.42041500000001,
        "Y" : 37.780130999999997,
        "Disp_Lon" : 0,
        "Disp_Lat" : 0,
        "Addr_type" : "StreetAddress",
        "Province" : "",
        "Postal" : "",
        "FromAddr" : "501",
        "ToAddr" : "525",
        "ZIP4" : "",
        "ZIP4_TYPE" : "",
        "User_fld" : "",
        "Ldu" : "",
        "xmin" : 0,
        "xmax" : 0,
        "ymin" : 0,
        "ymax" : 0
      }
    }]

这是我使用 java 为 json 对象与 gson 一起使用的类的示例

    public class Response {

    public Response()
    {}

    SpatialReference spatial;

    public List<Candidates> candidate;

    public class Candidates
    {
        public Candidates()
        {}

        @SerializedName("address")
        public String address;

        Location location;

        @SerializedName("score")
        public double score;

        Attribute attributes;

        Double getScore()
        {
            return score;
        }

    }

    public class Attribute {

        public Attribute()
        {}

        @SerializedName("Disp_Lon")
        public double dispLong;

        @SerializedName("Disp_Lat")
        public double dispLat;

    }

    public class Location {

        public Location()
        {}

        @SerializedName("x")
        public double x;

        @SerializedName("y")
        public double y;

    }

    public class SpatialReference {

        SpatialReference()
        {}

        @SerializedName("wkid")
        public String wkid;

    }

}

这是使用 gson 的示例代码

        Gson gson= new Gson()

        response1= gson.fromJson(reader, Response.class);

        return response1;

任何帮助将不胜感激,我对 GSON 和检索 JSON 对象非常陌生。非常感谢

4

1 回答 1

4

我会摆脱内部类定义,除非有一些非常令人信服的理由来拥有它们。如果命名空间是目标,那么至少使它们成为静态嵌套类定义。这也将使它们更容易反序列化。

我在http://programmerbruce.blogspot.com/2011/06/gson-v-jackson.html#TOC-Nested-Classes-including-Inner-Clas上发布了反序列化为静态嵌套类和内部类的示例

于 2013-02-12T23:26:59.147 回答