繁体   English   中英

Java Gson:反序列化复杂的JSON字符串

[英]Java Gson: Deserializing complex JSON string

考虑一个复杂的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对象创建类,该怎么办呢?

我认为您应该做的是创建一个实现com.google.gson.JsonDeserializer的类。 还有com.google.gson.JsonSerializer可用于其他方向。

该接口是通用的,因此您给了它一个表示数据的Java存储的自定义类。 然后,在该方法中,解析JSON并构建对象。

这使您无需编写各种Java POJO类就可以编写自定义反序列化器。

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

本文档介绍了如何编写自定义反序列化器: GSON指南

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM