2015-06-30 108 views
4

给定的样本JSON:如何获取JSON路径?

{ 
    "hello" : "wolrd", 
    "arrayField" : ["one", "two", "three"], 
    "mapField" : { 
    "name" : "john", 
    "lastName" : "doe" 
    } 
} 

是否有Java的一个框架,以帮助我从JSON树的JSON路径结构?一些与此类似:

$.hello 
$.arrayField[0] 
$.arrayField[1] 
$.arrayField[2] 
$.mapField.name 
$.mapField.lastName 

编辑:

我已经使用编码fasterxml的杰克逊第一种方法。但我想知道是否有更强大/灵活的东西。

final JsonNode rootNode = mapper.readValue(jon, JsonNode.class); 
    printFieldKeys(rootNode, "$"); 

    private static void printFieldKeys(JsonNode rootNode, String parent) { 
     final Iterator<Entry<String, JsonNode>> fieldIt = rootNode.fields(); 
     while (fieldIt.hasNext()) { 
      final Entry<String, JsonNode> next = fieldIt.next(); 
      final JsonNode value = next.getValue(); 
      final String path = parent + "." + next.getKey(); 

      if (value.isValueNode()) { 
       System.out.println(path + " = " + value.asText()); 
      } else { 
       System.out.println(path); 
      } 


      if (value.isArray()) { 
       for (int i = 0; i < value.size(); i++) { 
        printFieldKeys(value.get(i), path + "[" + i + "]"); 
       } 
      } else { 
       printFieldKeys(value, path); 
      } 

     } 
    } 
+0

使用像Jackson这样的库:http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/ – kosa

+0

您是否找到解决方案? –

回答

1

在这个图书馆看看:https://github.com/jayway/JsonPath

我相信这不正是你想要的东西。 :)

+1

我看着它,我认为它有能力通过提供的路径字符串读取和反序列化JSON,但没有找到如何获得结构中给定节点的路径。 – Russell

+0

真的吗?阅读我读过的文档,你可以配置它返回匹配元素的路径。你有没有看到这部分文档:https://github.com/jayway/JsonPath#path-vs-value –