JavaGSON:反序列化复杂JSON字符串
考虑一个复杂的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",
{
"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
本文档介绍如何编写自定义反序列化程序:谢谢您的回答。我可能要花很长时间才能看完所有这些,但我还是会迷路,因为所有的代码示例都是针对简单字符串的。。。但我会试一试的。谢谢你的回答。我可能要花很长时间才能看完所有这些,但我还是会迷路,因为所有的代码示例都是针对简单字符串的。。。但我会试一试。