当前位置: 首页 > 知识库问答 >
问题:

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

方璞
2023-03-14

我正在尝试使用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
      }
    }]

下面是我为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个答案

夏昌胤
2023-03-14

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

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

 类似资料:
  • 我从超文本传输协议Web服务收到以下JSON响应 现在我希望能够反序列化这个。我偶然发现了来自谷歌的Gson,它最初在一些小测试用例中运行良好,但我在反序列化上面的字符串时遇到了一些困难。 我正在阅读Gson用户指南,理想情况下,我希望有一个对象,它有两个属性:和,但是字段必须是对象的,这可能会让Gson感到困难。 然后我看了这个例子,它更接近我的问题,但我仍然不太明白。在这个例子中,整个响应是一

  • 我想使用Gson将JSON反序列化为对象。我已经定义了相应的类,其中一些类的对象包含在其他对象中。在尝试反序列化整个JSON时,我得到了空值,所以我开始将其拆分。 我已经到了所有低级类都支持自己的地步,但是当我试图反序列化成一个包含那个较小对象的实例的对象时,所有的东西都返回为null。 我的部分JSON: UserProfile类: UPfield类: 用户类: Ufield类: 我的主要观点是

  • 问题内容: 由于要执行处理的业务逻辑,因此我正在实现自定义。但是某些部分可以解析为标准方式。这是否可能- 我自己处理一些元素,并让一些嵌套元素自动处理? 这是JSON: 这是项的自定义反序列化器: 现在,我想让GSON解析枚举。我可以自己完成,这只是几行代码,但是我更愿意库做很多。 问题答案: …但是我希望图书馆尽其所能。 好吧,只需使用Gson。 有数据传输对象模式,尤其是Gson映射类,可以完

  • 主要内容:嵌套内部类示例,嵌套的静态内部类示例在本章中,我们将解释具有内部类的类的序列化/反序列化。 嵌套内部类示例 参考以下示例代码片段 - 示例 让我们来看看一个内部类的序列化/反序列化。 创建一个名为的Java类文件:GsonTester.java - 执行上面示例代码,得到以下结果 - 嵌套的静态内部类示例 参考以下代码实现 - 示例 我们来看一个实例,其中包含一个静态内部类的序列化/反序列化。 创建一个名为的Java类文件:Gson

  • 我的后端使用Springboot和Gson。我有这两个类的多对多关系: 订单类 产品类别 这是我用来向restendpoint提供数据的服务 以下是回应: 我的目标是反序列化/转义String属性。 我尝试过创建一个类并使用注释,但据我所知,当您需要为反序列化提供自定义行为时使用此注释,我示例中的JSON字符串非常简单,我不需要任何特定的逻辑。

  • 问题内容: 我使用了很多不可变的集合,并且很好奇如何使用Gson反序列化它们。由于没有人回答,而且我自己找到了解决方案,因此我正在简化问题并提出自己的答案。 我有两个问题: 如何为所有人编写一个作品? 如何全部注册? 问题答案: 更新:有https://github.com/acebaggins/gson- serializers ,其中涵盖了许多番石榴集合: 如何编写适用于所有Immutable