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

标签 java gson

早上好,

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

相关文章:

java - 使用 GSON 将 JSONObject 转换为 JSON

java - HazelcastInstanceAware 不适用于嵌套对象

java - 使用 saxon 获取远程 XML

java - 使用 clone() 复制字段与复制构造函数 Java

java - 并发线程安全 AtomicInteger

java - 通过gson将复杂的json对象转换为java对象

来自 Javascript JSONArray 的 Java JSONArray

java - 在自定义提供程序的测试中找不到 MessageBodyProvider - 手动工作

java - JNA:函数及其参数映射究竟是如何从java到VC++的