使用JXPathContext / java通过Xpath解析json对象

时间:2014-12-19 14:44:16

标签: java json xpath

我想在java中通过xpath解析一个json对象。我已经尝试过以下方式:

  JSONObject  obj=new JSONObject("{\"firstName\":\"John\",\"lastName\":\"doe\",\"age\":26,\"address\":{\"streetAddress\":\"naiststreet\",\"city\":\"Nara\",\"postalCode\":\"630-0192\"},\"phoneNumbers\":[{\"type\":\"iPhone\",\"number\":\"0123-4567-8888\"},{\"type\":\"home\",\"number\":\"0123-4567-8910\"}]}");

        JXPathContext context = JXPathContext .newContext(obj);
        Iterator i=context.iterate("phoneNumbers[0]/type");

但我发现上述方法不起作用,因为迭代器不包含任何东西。 谁能告诉我这里是否有任何错误? 另外,如果有任何其他更好的方法通过xpath解析json对象,有谁能告诉我。

1 个答案:

答案 0 :(得分:0)

正如注释中突出显示的那样,由于索引从1开始,XPath是错误的。

第二个技巧是在JSONObject上调用“ toMap”。 JXPath不知道如何处理JSONObject,但是可以处理地图。

JSONObject  obj=new JSONObject("{\"firstName\":\"John\",\"lastName\":\"doe\",\"age\":26,\"address\":{\"streetAddress\":\"naiststreet\",\"city\":\"Nara\",\"postalCode\":\"630-0192\"},\"phoneNumbers\":[{\"type\":\"iPhone\",\"number\":\"0123-4567-8888\"},{\"type\":\"home\",\"number\":\"0123-4567-8910\"}]}");

JXPathContext context = JXPathContext .newContext(obj.toMap());
Iterator i=context.iterate("phoneNumbers[1]/type");