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

时间:2015-10-02 18:50:39

标签: java json serialization gson

考虑一个复杂的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对象创建一个类,我怎么能这样做,因为那不合理?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

本文档介绍了如何编写自定义反序列化程序:GSON Guide