当前位置:   article > 正文

使用JsonPath字符串获取json内容_jsonpath提取json数据

jsonpath提取json数据

        JSON 路径表示法(JSON Path)是一种用于在 JSON 数据中定位和访问特定值的表达式语言。它类似于 XPath 对于 XML 数据的作用。

        GitHub - json-path/JsonPath: Java JsonPath implementation

JSON 路径表示法中常用的一些符号和语法:
  • $:表示根节点。
  • .:表示当前节点。
  • ..:表示递归下降,用于匹配任意层级的节点。
  • *:表示通配符,匹配任意名称的节点。
  • @: 筛选器
  • []:用于索引和过滤节点。
  • [,]:用于多个索引或过滤条件。
  • [start:end:step]:用于切片操作,类似于 Python 中的切片语法。
  • [?(<expression>)] : 筛选表达式。表达式的计算结果必须为布尔值。
JSON 路径表中的表达式
  • == :equal相等
  • != : 不相等
  • < :小于
  • <= :小于等于
  • >: 大于
  • >= :大于等于
  • =~ :正则表达式,左边值,右边正则表达式
  • in :包含
  • nin :不包含
  • subsetof :子集
  • anyof :相交
  • noneof:不相交
  • size:对象大小匹配,length或size
  • empty :为空
 JSON 路径表示法:
  • $ :表示根节点
  • . :表示当前节点
  • $.data:表示获取当前节点中的data节点
  • $..* :表示根节点下所有节点
  • $.data[0].phone:data节点下第1个对象中的phone节点
  • $.data[*].phone:data节点下所有对象中的phone节点
  • $.data[:2].phone: data节点下前两个对象中的phone节点
  • $.data[-1]:data节点最后一个节点
  • $.data[-2:]:data节点最后两个节点
  • $.store.book[?(@.price < 10)]:store中price值<10的book
  • $..book[?(@.price <= $['expensive'])] 所有price值<expensive值的book

举例

json数据

  1. {
  2. "store": {
  3. "book": [
  4. {
  5. "title": "Sayings of the Century",
  6. "price": 8.95
  7. },
  8. {
  9. "title": "Sword of Honour",
  10. "price": 12.99
  11. },
  12. {
  13. "title": "Moby Dick",
  14. "price": 8.99
  15. },
  16. {
  17. "title": "The Lord of the Rings",
  18. "price": 22.99
  19. }
  20. ],
  21. "bicycle": {
  22. "color": "red",
  23. "price": 19.95
  24. }
  25. },
  26. "expensive": 10
  27. }
  •  $.store.book :所有book集合
  • $.store.book[?(@.price > 10)] : price值大于10的所有book集合
  • $.store.book[?(@.title == 'Sword of Honou')]: title等于 'Sword of Honou'的所有book集合
  • $.store.book[?(@.title size 7)]:title字符串长度为7的所有book集合
  • $.store[?(@.book.size() > 4)].book:book集合大于4的的所有book集合

使用方法

 使用方法pom引入jar

  1. <dependency>
  2. <groupId>com.jayway.jsonpath</groupId>
  3. <artifactId>json-path</artifactId>
  4. <version>2.6.0</version>
  5. </dependency>
  1. @Test
  2. public void jsonPath() {
  3. String json = "{" +
  4. "\"data\":[" +
  5. "{\"name\":\"John\",\"phone\":\"1234567890\"}," +
  6. "{\"name\":\"Jane\",\"phone\":\"9876543210\"}" +
  7. "]," +
  8. "\"user\":{" +
  9. "\"name\":\"lizz\"" +
  10. "}," +
  11. "\"code\":\"123\"" +
  12. "}";
  13. // 解析 JSON
  14. Object document = Configuration.defaultConfiguration().jsonProvider().parse(json);
  15. // 当前节点下的code节点
  16. String path = "$.code";
  17. Object result = JsonPath.read(document, path);
  18. System.out.println(result);
  19. // 所有节点
  20. path = "$..*";
  21. result = JsonPath.read(document, path);
  22. System.out.println(JSON.toJSONString(result));
  23. // 执行data节点中所有phone节点
  24. path = " $.data[*].phone";
  25. result = JsonPath.read(document, path);
  26. System.out.println(result);
  27. // 执行data节点中index为1对象中的phone节点
  28. path = "$.data[0].phone";
  29. result = JsonPath.read(document, path);
  30. System.out.println(result);
  31. // 执行data节点中所有phone节点
  32. path = " $.data[-1].phone";
  33. result = JsonPath.read(document, path);
  34. System.out.println(result);
  35. }

 结果

  1. - Evaluating path: $['code']
  2. 123
  3. - Evaluating path: $..[*]
  4. [[{"name":"John","phone":"1234567890"},{"name":"Jane","phone":"9876543210"}],{"name":"lizz"},"123",{"$ref":"$[0][0]"},{"$ref":"$[0][1]"},"John","1234567890","Jane","9876543210","lizz"]
  5. - Evaluating path: $['data'][*]['phone']
  6. ["1234567890","9876543210"]
  7. - Evaluating path: $['data'][0]['phone']
  8. 1234567890
  9. - Evaluating path: $['data'][-1]['phone']
  10. 9876543210
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/977914
推荐阅读
相关标签
  

闽ICP备14008679号