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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14843322/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 17:35:58  来源:igfitidea点击:

Deserializing Multiple inner classes using GSON

javajsonserializationgson

提问by vaultzero

I am trying Deserialize data from JSON object using gson. I am having trouble with 1)designing a class. 2) getting a null object from the inner list object.

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

Here is a sample of the JSON object

这是 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
      }
    }]

Here is a sample of the class i made for the json object to use with gson using java

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

    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;

    }

}

Here is the sample code using gson

这是使用 gson 的示例代码

        Gson gson= new Gson()

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

        return response1;

Any help would be appreciated and I am very new to GSON and retrieving JSON objects. Thank you very much

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

采纳答案by Programmer Bruce

I'd get rid of the inner class definitions, unless there were some very compelling reason to have them. If namespace is the goal, then at least make them static nested class definitions. This will also make them easier to deserialize into.

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

I posted examples of deserializing into static nested classes and inner classes at http://programmerbruce.blogspot.com/2011/06/gson-v-Hymanson.html#TOC-Nested-Classes-including-Inner-Clas

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