【问题标题】:Java Gson: Deserializing complex JSON stringJava Gson:反序列化复杂的 JSON 字符串
【发布时间】:2015-10-02 18:50:39
【问题描述】:

考虑一个复杂的 JSON 字符串

{
  "1": {
    "name": "1",
    "CLUSTERS": {
      "3": {
        "name": "3",
        "SUBCLUSTERS": {
          "6": {
            "INSTANCES": [
              {
                "SERVER": "4",
                "ID": "133",
                "DESCR": "Hi"
              },
              {
                "SERVER": "5",
                "ID": "6",
                "DESCR": "Lo"
              },            
            "name": "6"
          }
        }
      }
    }
  }
}

有数百个 CLUSTERSSUBCLUSTERS。您将如何使用 Java 反序列化如此复杂的结构。有没有一种方法可以反序列化而无需创建像 public class Cluster3public class Subcluster6 这样的类?

到目前为止,我有这些课程:

Cluster.java

public class Cluster {

    @SerializedName("SUBCLUSTERS")
    private Subcluster subCluster;

    @SerializedName("name")
    private String name;
}

Subcluster.java

public class Subcluster {

    @SerializedName("INSTANCES")
    private InstanceArray instanceArray;
}

Site.java

public class Site {

    @SerializedName("CLUSTERS")
    private Cluster cluster;

    @SerializedName("name")
    private String name;
}

Instance.java

public class Instance {

    @SerializedName("SERVER")
    private String serverName;

    @SerializedName("ID")
    private String instanceId;

    @SerializedName("DESC")
    private String description;
}

InstanceArray.java

public class InstanceArray {

    @SerializedName("INSTANCES")
    private List<Instance> instance;
}

但我认为我没有考虑到实际的CLUSTERSSUBCLUSTERS 对象本身,例如36。如果不为每个单独的 CLUSTER 和 SUBCLUSTER 对象创建一个类,我怎么能做到这一点,因为这不合理?

【问题讨论】:

    标签: java json serialization gson


    【解决方案1】:

    我认为您应该做的是创建一个实现 com.google.gson.JsonDeserializer 的类。还有 com.google.gson.JsonSerializer 可以朝另一个方向发展。

    接口是通用的,所以你给它一个自定义的类来代表数据的Java存储。然后在方法中,解析 JSON 并构建对象。

    这允许您编写自定义反序列化器,而无需制作各种 Java POJO 类。

    我最近使用这种方法在我的应用程序中反序列化了一些棘手的 JSON。

    本文档解释了如何编写自定义反序列化器:GSON Guide

    【讨论】:

    • 感谢您的回答。我可能需要很长时间才能通读所有这些内容,但我仍然会迷路,因为所有代码示例都是针对简单字符串的……但我会试一试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    相关资源
    最近更新 更多