Java 使用GSON检索嵌套在不断变化的JSON结构/层次结构中的JsonArray
我想从JSON输出中检索一个数组。数组及其各自的成员永远不会更改。但是,包含数组的JSON输出的层次结构确实会定期更改(超出我的控制范围)。我正在努力找出如何在不知道JSON层次结构的情况下可靠地提取数组 例如: 在JSON输出#1中,我们有一组对象,它们之间嵌套着一个水手数组:Java 使用GSON检索嵌套在不断变化的JSON结构/层次结构中的JsonArray,java,arrays,json,gson,Java,Arrays,Json,Gson,我想从JSON输出中检索一个数组。数组及其各自的成员永远不会更改。但是,包含数组的JSON输出的层次结构确实会定期更改(超出我的控制范围)。我正在努力找出如何在不知道JSON层次结构的情况下可靠地提取数组 例如: 在JSON输出#1中,我们有一组对象,它们之间嵌套着一个水手数组: { "eat": "grub", "drink": "rum", "sailors": [ { "firstName": "John", "lastName": "Doe"
{
"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层次结构再次更改时重新编写或更新它
请帮忙 您可能希望使用递归并手动执行(使用org.json)。您还可以使用或从JSON字符串读取树 您应该有一个
getsealersarray(stringjson)
方法,该方法返回所有sealers的数组
要递归地执行此操作,请创建读取JSONArray
、读取JSONObject
和读取值的方法。每个方法都将接受一个对象作为参数。检查对象的类型是否为JSONArray
或JSONObject
或值,并调用相应的递归方法。如果是数组,则可以在循环中调用getJsonObject
方法
输入您的逻辑以检查水手密钥,并在遇到它时返回数组。好了,给你 如果它总是“水手”,您可以递归地搜索该键。