早上好
我正在努力使用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 ;
}
我了解为什么它不起作用,但是我不确定如何解决它。
答案 0 :(得分:0)
如果不使用自定义序列化器/反序列化器,则将无法使用GSON或其他JSON绑定。问题是这样的:
[
[
"cluster1",
[
"host1",
"host2"
],
[
"Virtual Machine",
"Virtual Machine"
]
]
]
不能用静态类型的Java数据结构表示。在第二层,您需要一个列表或数组类型,其元素为字符串或子列表/子数组。 Java不支持此功能。您可以使用Object[]
或List<Object>
并进行类型转换,但是绑定并非旨在解决这种情况。
我看到了三种选择:
1)您可以更改此数据的架构;例如
[
[
[
"cluster1"
],
[
"host1",
"host2"
],
[
"Virtual Machine",
"Virtual Machine"
]
]
]
2)您可以使用JSON解析器来生成JSONObject
/ JSONArray
对象,并自己处理不一致性。 (如何处理取决于您自己。这取决于“结果”部分的实际含义以及您需要采取的措施。)
3)您可以使用自定义(即手写)序列化器/反序列化器实现基于GSON的绑定。