Java中JSONPath的基本使用

2024-01-09

我有 JSON 作为字符串和 JSONPath 作为字符串。我想使用 JSON 路径查询 JSON,以字符串形式获取结果 JSON。

我认为Jayway 的 json-path https://code.google.com/p/json-path/ 是标准 https://stackoverflow.com/a/5217785/1092672. The 在线API https://rest-assured.googlecode.com/svn/tags/1.6.1/apidocs/com/jayway/restassured/path/json/JsonPath.html,不过并没有太大的关系您从 Maven 获得的实际库 http://mvnrepository.com/artifact/com.jayway.jsonpath/json-path/0.9.1. GrepCode 的版本 http://grepcode.com/file/repo1.maven.org/maven2/com.jayway.jsonpath/json-path/0.5.3/com/jayway/jsonpath/JsonPath.java不过大致匹配。

看来我应该能够做到:

String originalJson; //these are initialized to actual data
String jsonPath;
String queriedJson = JsonPath.<String>read(originalJson, jsonPath);

问题是read根据 JSONPath 实际找到的内容返回它认为最合适的任何内容(例如List<Object>, String, double等),因此我的代码对某些查询抛出异常。假设有某种方法来查询 JSON 并获取 JSON,这似乎是相当合理的;有什么建议么?


Java JsonPath API 位于jayway JsonPath https://github.com/jayway/JsonPath自从上述所有答案/评论以来,可能已经发生了一些变化。文档也是如此。只需点击上面的链接并阅读该内容即可自述文件.md https://github.com/jayway/JsonPath/blob/master/README.md,它包含一些非常清晰的使用文档(IMO)。

基本上,从该库当前最新版本 2.2.0 开始,有几种不同的方法可以实现此处的要求,例如:

Pattern:
--------
String json = "{...your JSON here...}";
String jsonPathExpression = "$...your jsonPath expression here..."; 
J requestedClass = JsonPath.parse(json).read(jsonPathExpression, YouRequestedClass.class);

Example:
--------
// For better readability:  {"store": { "books": [ {"author": "Stephen King", "title": "IT"}, {"author": "Agatha Christie", "title": "The ABC Murders"} ] } }
String json = "{\"store\": { \"books\": [ {\"author\": \"Stephen King\", \"title\": \"IT\"}, {\"author\": \"Agatha Christie\", \"title\": \"The ABC Murders\"} ] } }";
String jsonPathExpression = "$.store.books[?(@.title=='IT')]"; 
JsonNode jsonNode = JsonPath.parse(json).read(jsonPathExpression, JsonNode.class);

作为参考,调用 'JsonPath.parse(..)' 将返回类 ' 的对象Json内容 https://github.com/jayway/JsonPath/blob/master/json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java' 实现一些接口,例如 '读取上下文 https://github.com/jayway/JsonPath/blob/master/json-path/src/main/java/com/jayway/jsonpath/ReadContext.java',其中包含几个不同的'read(..)'操作,例如上面演示的操作:

/**
 * Reads the given path from this context
 *
 * @param path path to apply
 * @param type    expected return type (will try to map)
 * @param <T>
 * @return result
 */
<T> T read(JsonPath path, Class<T> type);

希望这对任何人都有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中JSONPath的基本使用 的相关文章

随机推荐