考虑一个复杂的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"
}
}
}
}
}
}
有数百CLUSTERS
和SUBCLUSTERS
。您将如何使用Java对这种复杂结构进行反序列化。有没有办法反序列化而不必创建像public class Cluster3
和public 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;
}
但我不认为我会考虑实际的CLUSTERS
和SUBCLUSTERS
个对象本身,例如3
和6
。如果不为每个CLUSTER和SUBCLUSTER对象创建一个类,我怎么能这样做,因为那不合理?
答案 0 :(得分:0)
我认为你应该做的是创建一个实现com.google.gson.JsonDeserializer的类。还有com.google.gson.JsonSerializer可以向另一个方向前进。
接口是通用的,因此您可以为其提供一个表示数据Java存储的自定义类。然后在该方法中,您解析JSON并构建对象。
这允许您编写自定义反序列化器而无需创建各种Java POJO类。
我最近使用这种方法在我的应用程序中反序列化了一些棘手的JSON。
本文档介绍了如何编写自定义反序列化程序:GSON Guide