Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaGSON:反序列化复杂JSON字符串_Java_Json_Serialization_Gson - Fatal编程技术网

JavaGSON:反序列化复杂JSON字符串

JavaGSON:反序列化复杂JSON字符串,java,json,serialization,gson,Java,Json,Serialization,Gson,考虑一个复杂的JSON字符串 { "1": { "name": "1", "CLUSTERS": { "3": { "name": "3", "SUBCLUSTERS": { "6": { "INSTANCES": [ { "SERVER": "4", "ID": "133",

考虑一个复杂的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"
          }
        }
      }
    }
  }
}
它有数百个
集群
子集群
。您将如何使用Java对如此复杂的结构进行反序列化。有没有一种方法可以在不必创建类的情况下反序列化,如
public class Cluster3
public class Subcluster6

到目前为止,我有以下课程:

Cluster.java

public class Cluster {

    @SerializedName("SUBCLUSTERS")
    private Subcluster subCluster;

    @SerializedName("name")
    private String name;
}
public class Subcluster {

    @SerializedName("INSTANCES")
    private InstanceArray instanceArray;
}
public class Site {

    @SerializedName("CLUSTERS")
    private Cluster cluster;

    @SerializedName("name")
    private String name;
}
public class Instance {

    @SerializedName("SERVER")
    private String serverName;

    @SerializedName("ID")
    private String instanceId;

    @SerializedName("DESC")
    private String description;
}
public class InstanceArray {

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

public class Cluster {

    @SerializedName("SUBCLUSTERS")
    private Subcluster subCluster;

    @SerializedName("name")
    private String name;
}
public class Subcluster {

    @SerializedName("INSTANCES")
    private InstanceArray instanceArray;
}
public class Site {

    @SerializedName("CLUSTERS")
    private Cluster cluster;

    @SerializedName("name")
    private String name;
}
public class Instance {

    @SerializedName("SERVER")
    private String serverName;

    @SerializedName("ID")
    private String instanceId;

    @SerializedName("DESC")
    private String description;
}
public class InstanceArray {

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

public class Cluster {

    @SerializedName("SUBCLUSTERS")
    private Subcluster subCluster;

    @SerializedName("name")
    private String name;
}
public class Subcluster {

    @SerializedName("INSTANCES")
    private InstanceArray instanceArray;
}
public class Site {

    @SerializedName("CLUSTERS")
    private Cluster cluster;

    @SerializedName("name")
    private String name;
}
public class Instance {

    @SerializedName("SERVER")
    private String serverName;

    @SerializedName("ID")
    private String instanceId;

    @SerializedName("DESC")
    private String description;
}
public class InstanceArray {

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

public class Cluster {

    @SerializedName("SUBCLUSTERS")
    private Subcluster subCluster;

    @SerializedName("name")
    private String name;
}
public class Subcluster {

    @SerializedName("INSTANCES")
    private InstanceArray instanceArray;
}
public class Site {

    @SerializedName("CLUSTERS")
    private Cluster cluster;

    @SerializedName("name")
    private String name;
}
public class Instance {

    @SerializedName("SERVER")
    private String serverName;

    @SerializedName("ID")
    private String instanceId;

    @SerializedName("DESC")
    private String description;
}
public class InstanceArray {

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

public class Cluster {

    @SerializedName("SUBCLUSTERS")
    private Subcluster subCluster;

    @SerializedName("name")
    private String name;
}
public class Subcluster {

    @SerializedName("INSTANCES")
    private InstanceArray instanceArray;
}
public class Site {

    @SerializedName("CLUSTERS")
    private Cluster cluster;

    @SerializedName("name")
    private String name;
}
public class Instance {

    @SerializedName("SERVER")
    private String serverName;

    @SerializedName("ID")
    private String instanceId;

    @SerializedName("DESC")
    private String description;
}
public class InstanceArray {

    @SerializedName("INSTANCES")
    private List<Instance> instance;
}
公共类InstanceArray{
@SerializedName(“实例”)
私有列表实例;
}

但是我认为我没有考虑实际的
集群
子集群
对象本身,例如
3
6
。如果不为每个单独的集群和子集群对象创建一个类,我怎么能做到这一点呢?因为这是不可能的。

我认为您应该创建一个实现com.google.gson.JsonDeserializer的类。还有com.google.gson.JsonSerializer,用于向另一个方向发展

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

这允许您编写自定义反序列化程序,而无需生成各种JavaPOJO类

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


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

我认为您应该创建一个实现com.google.gson.JsonDeserializer的类。还有com.google.gson.JsonSerializer,用于向另一个方向发展

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

这允许您编写自定义反序列化程序,而无需生成各种JavaPOJO类

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


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

谢谢您的回答。我可能要花很长时间才能看完所有这些,但我还是会迷路,因为所有的代码示例都是针对简单字符串的。。。但我会试一试的。谢谢你的回答。我可能要花很长时间才能看完所有这些,但我还是会迷路,因为所有的代码示例都是针对简单字符串的。。。但我会试一试。