我有一种情况,我想从JSON输出中检索一个数组。阵列及其各自的成员永远不会改变。但是,包含该数组的JSON输出的层次结构会定期更改(超出我的控制范围)。我正在努力弄清楚如何在不知道JSON层次结构的情况下可靠地提取数组。
实施例: 在JSON输出#1中,我们有一堆对象,其中一个水手阵列嵌套在两者之间:
{
"eat": "grub",
"drink": "rum",
"sailors": [
{
"firstName": "John",
"lastName": "Doe"
},
{
"firstName": "Anna",
"lastName": "Smith"
},
{
"firstName": "Peter",
"lastName": "Jones"
}
]
}
在JSON输出#2中,我们有相同的水手阵列,但它位于层次结构的不同部分:
{
"eat": "grub",
"drink": "rum",
"boats": [
{
"name": "blackpearl"
},
{
"name": "batavia",
"crew": [
{
"name": "captain"
},
{
"name": "deckswab",
"anotherObject": {
"sailors": [
{
"firstName": "John",
"lastName": "Doe"
},
{
"firstName": "Anna",
"lastName": "Smith"
},
{
"firstName": "Peter",
"lastName": "Jones"
}
]
}
}
]
}
]
}
在这两种情况下,我都希望得到一个水手阵列的Gson JsonArray。
JsonParser parser = new JsonParser();
JsonObject root = parser.parse(json).getAsJsonObject();
JsonArray sailors = root.get("sailors").getAsJsonArray();
以上代码适用于JSON#1输出。我知道我可以通过将一堆get和getAsJsonObject / Array方法串联起来为JSON输出#2重写它。
但是,我不确定如何调整它以便无论它在层次结构中的哪个位置都能找到数组,而不必每次都重新编写代码。这对我来说很重要,因为JSON输出可能会在未来再次发生变化,我希望我的代码更耐用,这样我就不必在JSON层次结构再次发生变化时重新编写或更新它。
请帮忙!