如何在其他级别深度达到json值?

时间:2015-07-28 12:43:56

标签: java json jackson gson

假设我有这个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

2 个答案:

答案 0 :(得分:1)

您的JSON无效,因为您没有使用逗号key:value分隔,对,如http://json.org

所示

enter image description here

所以将你的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");

答案 1 :(得分:1)

Aside from traversing tree with path, which does work, you may also consider using JSON Path that is directly supported with method at. Something like:

String type = root.at("/level2/level3/level3/type").asText();