早上好,
我正在努力使用 GSON 解析特定 Web 服务的一些 JSON 输出。以下是一些示例输出:
[
{
"count": 1,
"headings": [
"name",
"hosts",
"Model",
],
"kind": "Cluster",
"offset": 0,
"results": [
[
"cluster1",
[
"host1",
"host2"
],
[
"Virtual Machine",
"Virtual Machine"
]
]
]
}
]
“结果”部分是我处理时遇到问题的部分。基本上,由于结果具有混合类型、列表和字符串,因此我无法编写表示它的对象。我一直在读到这可能需要解串器。我对此有点超出我的深度,希望您能提供有关如何解决此问题的见解。
我当前使用的类如下所示:
public class ModelDefinition
{
public Integer count ;
public ArrayList<String> headings ;
public String kind ;
public Integer next_offset ;
public Integer offset ;
public String results_id ;
public String next ;
}
public class LongModelDefinition extends ModelDefinition
{
public ArrayList<String[][]> results ;
}
我明白为什么它不起作用,但我不知道如何修复它。
最佳答案
如果不求助于自定义序列化器/反序列化器,您将无法为此使用 GSON 或其他 JSON 绑定(bind)。问题是这样的:
[
[
"cluster1",
[
"host1",
"host2"
],
[
"Virtual Machine",
"Virtual Machine"
]
]
]
不能用静态类型的 Java 数据结构表示。在第二级,您需要一个列表或数组类型,其元素是字符串或子列表/子数组。 Java 不支持这个。您可以使用 Object[]
或List<Object>
和类型转换,但绑定(bind)的设计并不是为了应对此类事情。
我看到三种选择:
1) 您可以更改此数据的架构;例如
[
[
[
"cluster1"
],
[
"host1",
"host2"
],
[
"Virtual Machine",
"Virtual Machine"
]
]
]
2) 您可以使用 JSON 解析器来生成 JSONObject
/JSONArray
物体,并自己处理不均匀性。 (你如何处理它取决于你。这取决于“结果”部分的实际含义,以及你需要用它做什么。)
3) 您可以使用自定义(即手写)序列化器/反序列化器来实现基于 GSON 的绑定(bind)。
关于java - 使用 GSON 处理具有混合列表和单一属性的 JSON 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51968689/