gpt4 book ai didi

java - 使用 GSON 处理具有混合列表和单一属性的 JSON 输出

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:54 26 4
gpt4 key购买 nike

早上好,

我正在努力使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com