使用GSON反序列化多个内部类

时间:2013-02-12 22:47:55

标签: java json serialization gson

我正在尝试使用gson从JSON对象反序列化数据。我在设计课程时遇到了麻烦。 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
      }
    }]

以下是我为json对象使用java

与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对象都很陌生。非常感谢你

1 个答案:

答案 0 :(得分:4)

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

我在http://programmerbruce.blogspot.com/2011/06/gson-v-jackson.html#TOC-Nested-Classes-including-Inner-Clas

发布了反序列化到静态嵌套类和内部类的示例