如何使用 gson.fromjson 递归地转换 json
How can I cast json recursively using gson.fromjson
鉴于我有以下 json 结构:
{
"Role": {
"id": "5",
"name": "bb1",
"description": "desc1",
"PermissionDeck": [
{
"id": "7",
"Permission": [
{
"id": "398"
},
{
"id": "399"
},
{
"id": "400"
},
{
"id": "401"
},
{
"id": "402"
}
],
"Limit": [
{
"id": "4"
},
{
"id": "5"
}
]
}
]
}
}
如果我想将其转换为 LinkedTreeMap result
以便其内容可以通过以下方式检索:
result.get("Role")
returns 地图
和
result.get("Role").get("PermissionDeck").size() == 5
和
result.get("Role").get("PermissionDeck").get(0).get("id") == 398
基本上使gson.fromjson递归进入结构,并将任何嵌套结构折叠到LinkedTreeMap中,直到它到达最内层,然后进入LinkedTreeMap
这是否可以在不编写自定义递归方法的情况下实现?
你不能。最接近的是使用 JsonObject
并为每个嵌套成员使用适当的 getter。换句话说,您的代码需要明确说明它在 JSON.
中的期望
例如
JsonObject result = new Gson().fromJson(theJson), JsonObject.class);
System.out.println(result.getAsJsonObject("Role").getAsJsonArray("PermissionDeck").size());
将打印 1
,因为在根 JSON 对象 Role
中的 JSON 数组中只有一个名为 PermissionDeck
的元素 JSON对象。
鉴于我有以下 json 结构:
{
"Role": {
"id": "5",
"name": "bb1",
"description": "desc1",
"PermissionDeck": [
{
"id": "7",
"Permission": [
{
"id": "398"
},
{
"id": "399"
},
{
"id": "400"
},
{
"id": "401"
},
{
"id": "402"
}
],
"Limit": [
{
"id": "4"
},
{
"id": "5"
}
]
}
]
}
}
如果我想将其转换为 LinkedTreeMap result
以便其内容可以通过以下方式检索:
result.get("Role")
returns 地图
和
result.get("Role").get("PermissionDeck").size() == 5
和
result.get("Role").get("PermissionDeck").get(0).get("id") == 398
基本上使gson.fromjson递归进入结构,并将任何嵌套结构折叠到LinkedTreeMap中,直到它到达最内层,然后进入LinkedTreeMap
这是否可以在不编写自定义递归方法的情况下实现?
你不能。最接近的是使用 JsonObject
并为每个嵌套成员使用适当的 getter。换句话说,您的代码需要明确说明它在 JSON.
例如
JsonObject result = new Gson().fromJson(theJson), JsonObject.class);
System.out.println(result.getAsJsonObject("Role").getAsJsonArray("PermissionDeck").size());
将打印 1
,因为在根 JSON 对象 Role
中的 JSON 数组中只有一个名为 PermissionDeck
的元素 JSON对象。