【发布时间】:2018-08-22 14:05:08
【问题描述】:
早上好,
我正在努力使用 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 的最佳工具,也许像使用 Jackson 那样处理抽象程度较低的 json 可能是更好的选择。在示例中不清楚,但是如果只有一个主机而不是两个主机,则可能会收到一个字符串而不是数组,从而增加了反序列化的复杂性。
-
其实你是对的。这个网络服务会将任何单个元素列表变成一个字符串,最烦人的。我无法控制网络服务,我只是一个客户。到目前为止,我已经通过谨慎处理我的查询来处理这个问题。但是,它使代码变得臃肿和丑陋,我正在寻找一种更简洁的方法来处理这个问题。