如何达到其他级别深度的 json 值?
How reach json values in depth of other levels?
假设我有这个 JSON 文件:
{
"level1" :{
"type": "x"
},
"level2" :{
"level3": {
"level3": {
"type" : "Y"
}
}
}
}
通过使用Jackson
,如何得到type=Y值?
也可以通过gson.jar
到达
目前我试过的是:
ObjectMapper ob = new ObjectMapper();
String jsonContent = "...";
JsonNode root = ob.readTree(jsonContent)
root.path("level1"); //return results fine
root.path("level2").path("level3"); //not return any results
root.path("level2/level3"); //not return any results
您的 JSON 无效,因为您没有使用逗号 ,
分隔 key:value
对,如 http://json.org
所示
所以把你的JSON改成
{
"level1" :{
"type": "x"
}, <-- add this comma
"level2" :{
"level3": {
"level3": {
"type" : "Y"
}
}
}
}
现在您应该可以使用
JsonNode root = new ObjectMapper().readTree(jsonContent);
root.path("level2")
.path("level3")
.path("level3");
使用 Gson 你的代码看起来像
JsonObject root = new JsonParser().parse(jsonContent).getAsJsonObject();
root.getAsJsonObject("level2")
.getAsJsonObject("level3")
.getAsJsonObject("level3");
除了使用 path
遍历树之外,您还可以考虑使用 JSON 方法 at
直接支持的路径。
类似于:
String type = root.at("/level2/level3/level3/type").asText();
假设我有这个 JSON 文件:
{
"level1" :{
"type": "x"
},
"level2" :{
"level3": {
"level3": {
"type" : "Y"
}
}
}
}
通过使用Jackson
,如何得到type=Y值?
也可以通过gson.jar
目前我试过的是:
ObjectMapper ob = new ObjectMapper();
String jsonContent = "...";
JsonNode root = ob.readTree(jsonContent)
root.path("level1"); //return results fine
root.path("level2").path("level3"); //not return any results
root.path("level2/level3"); //not return any results
您的 JSON 无效,因为您没有使用逗号 ,
分隔 key:value
对,如 http://json.org
所以把你的JSON改成
{
"level1" :{
"type": "x"
}, <-- add this comma
"level2" :{
"level3": {
"level3": {
"type" : "Y"
}
}
}
}
现在您应该可以使用
JsonNode root = new ObjectMapper().readTree(jsonContent);
root.path("level2")
.path("level3")
.path("level3");
使用 Gson 你的代码看起来像
JsonObject root = new JsonParser().parse(jsonContent).getAsJsonObject();
root.getAsJsonObject("level2")
.getAsJsonObject("level3")
.getAsJsonObject("level3");
除了使用 path
遍历树之外,您还可以考虑使用 JSON 方法 at
直接支持的路径。
类似于:
String type = root.at("/level2/level3/level3/type").asText();