添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
import java . io . BufferedReader ; import java . io . FileNotFoundException ; import java . io . FileReader ; import java . util . Iterator ; import java . util . List ; import java . util . Map ; import net . minidev . json . JSONArray ; import com . jayway . jsonpath . Configuration ; import com . jayway . jsonpath . JsonPath ; import com . jayway . jsonpath . ReadContext ; public class TestJsonPath { public static void main ( String [ ] args ) { // TODO Auto-generated method stub String sjson = readtxt ( ) ; //String sjson = "{\"store\": {\"book\": [{\"category\": \"reference\",\"author\": \"Nigel Rees\",\"title\": \"Sayings of the Century\",\"price\": 8.95},{\"category\": \"fiction\",\"author\": \"Evelyn Waugh\",\"title\": \"Sword of Honour\",\"price\": 12.99},{\"category\": \"fiction\",\"author\": \"Herman Melville\",\"title\": \"Moby Dick\",\"isbn\": \"0-553-21311-3\",\"price\": 8.99},{\"category\": \"fiction\",\"author\": \"J. R. R. Tolkien\",\"title\": \"The Lord of the Rings\",\"isbn\": \"0-395-19395-8\",\"price\": 22.99}],\"bicycle\": {\"color\": \"red\",\"price\": 19.95}},\"expensive\": 10}"; print("--------------------------------------getJsonValue0--------------------------------------"); getJsonValue0(sjson); print("--------------------------------------getJsonValue1--------------------------------------"); getJsonValue1(sjson); print("--------------------------------------getJsonValue2--------------------------------------"); getJsonValue2(sjson); print("--------------------------------------getJsonValue3--------------------------------------"); getJsonValue3(sjson); print("--------------------------------------getJsonValue4--------------------------------------"); getJsonValue4(sjson); print ( "--------------------------------------getJsonValue--------------------------------------" ) ; getJsonValue ( sjson ) ; private static String readtxt ( ) { // TODO Auto-generated method stub StringBuilder sb = new StringBuilder ( ) ; try { FileReader fr = new FileReader ( "D:/workspace/PressureTest/json.txt" ) ; BufferedReader bfd = new BufferedReader ( fr ) ; String s = "" ; while ( ( s = bfd . readLine ( ) ) != null ) { sb . append ( s ) ; } catch ( Exception e ) { // TODO Auto-generated catch block e . printStackTrace ( ) ; System . out . println ( sb . toString ( ) ) ; return sb . toString ( ) ; private static void getJsonValue ( String json ) { //The authors of all books:获取json中store下book下的所有author值 List < String > authors1 = JsonPath . read ( json , "$.store.book[*].author" ) ; //All authors:获取所有json中所有author的值 List < String > authors2 = JsonPath . read ( json , "$..author" ) ; //All things, both books and bicycles //authors3返回的是net.minidev.json.JSONArray:获取json中store下的所有value值,不包含key,如key有两个,book和bicycle List < Object > authors3 = JsonPath . read ( json , "$.store.*" ) ; //The price of everything:获取json中store下所有price的值 List < Object > authors4 = JsonPath . read ( json , "$.store..price" ) ; //The third book:获取json中book数组的第3个值 List < Object > authors5 = JsonPath . read ( json , "$..book[2]" ) ; //The first two books:获取json中book数组的第1和第2两个个值 List < Object > authors6 = JsonPath . read ( json , "$..book[0,1]" ) ; //All books from index 0 (inclusive) until index 2 (exclusive):获取json中book数组的前两个区间值 List < Object > authors7 = JsonPath . read ( json , "$..book[:2]" ) ; //All books from index 1 (inclusive) until index 2 (exclusive):获取json中book数组的第2个值 List < Object > authors8 = JsonPath . read ( json , "$..book[1:2]" ) ; //Last two books:获取json中book数组的最后两个值 List < Object > authors9 = JsonPath . read ( json , "$..book[-2:]" ) ; //Book number two from tail:获取json中book数组的第3个到最后一个的区间值 List < Object > authors10 = JsonPath . read ( json , "$..book[2:]" ) ; //All books with an ISBN number:获取json中book数组中包含isbn的所有值 List < Object > authors11 = JsonPath . read ( json , "$..book[?(@.isbn)]" ) ; //All books in store cheaper than 10:获取json中book数组中price<10的所有值 List < Object > authors12 = JsonPath . read ( json , "$.store.book[?(@.price < 10)]" ) ; //All books in store that are not "expensive":获取json中book数组中price<=expensive的所有值 List < Object > authors13 = JsonPath . read ( json , "$..book[?(@.price <= $['expensive'])]" ) ; //All books matching regex (ignore case):获取json中book数组中的作者以REES结尾的所有值(REES不区分大小写) List < Object > authors14 = JsonPath . read ( json , "$..book[?(@.author =~ /.*REES/i)]" ) ; //Give me every thing:逐层列出json中的所有值,层级由外到内 List < Object > authors15 = JsonPath . read ( json , "$..*" ) ; //The number of books:获取json中book数组的长度 List < Object > authors16 = JsonPath . read ( json , "$..book.length()" ) ; print ( "**************authors1**************" ) ; print ( authors1 ) ; print ( "**************authors2**************" ) ; print ( authors2 ) ; print ( "**************authors3**************" ) ; printOb ( authors3 ) ; print ( "**************authors4**************" ) ; printOb ( authors4 ) ; print ( "**************authors5**************" ) ; printOb ( authors5 ) ; print ( "**************authors6**************" ) ; printOb ( authors6 ) ; print ( "**************authors7**************" ) ; printOb ( authors7 ) ; print ( "**************authors8**************" ) ; printOb ( authors8 ) ; print ( "**************authors9**************" ) ; printOb ( authors9 ) ; print ( "**************authors10**************" ) ; printOb ( authors10 ) ; print ( "**************authors11**************" ) ; printOb ( authors11 ) ; print ( "**************authors12**************" ) ; printOb ( authors12 ) ; print ( "**************authors13**************" ) ; printOb ( authors13 ) ; print ( "**************authors14**************" ) ; printOb ( authors14 ) ; print ( "**************authors15**************" ) ; printOb ( authors15 ) ; print ( "**************authors16**************" ) ; printOb ( authors16 ) ; * 读取json的一种写法,得到匹配表达式的所有值 private static void getJsonValue0 ( String json ) { // TODO Auto-generated method stub List < String > authors = JsonPath . read ( json , "$.store.book[*].author" ) ; //System.out.println(authors.size()); print ( authors ) ; * 读取json的一种写法,得到某个具体值 private static void getJsonValue1 ( String json ) { Object document = Configuration . defaultConfiguration ( ) . jsonProvider ( ) . parse ( json ) ; String author0 = JsonPath . read ( document , "$.store.book[0].author" ) ; String author1 = JsonPath . read ( document , "$.store.book[1].author" ) ; print ( author0 ) ; print ( author1 ) ; * 读取json的一种写法 private static void getJsonValue2 ( String json ) { ReadContext ctx = JsonPath . parse ( json ) ; List < String > authorsOfBooksWithISBN = ctx . read ( "$.store.book[?(@.isbn)].author" ) ; List < Map < String , Object > > expensiveBooks = JsonPath . using ( Configuration . defaultConfiguration ( ) ) . parse ( json ) . read ( "$.store.book[?(@.price > 10)]" , List . class ) ; print ( authorsOfBooksWithISBN ) ; print ( "****************Map****************" ) ; printListMap ( expensiveBooks ) ; *读取json的一种写法 *得到的值是一个String,所以不能用List存储 private static void getJsonValue3 ( String json ) { //Will throw an java.lang.ClassCastException //List<String> list = JsonPath.parse(json).read("$.store.book[0].author"); //由于会抛异常,暂时注释上面一行,要用的话,应使用下面的格式 //Works fine String author = JsonPath . parse ( json ) . read ( "$.store.book[0].author" ) ; print ( author ) ; *读取json的一种写法 *支持逻辑表达式,&&和|| private static void getJsonValue4 ( String json ) { List < Map < String , Object > > books1 = JsonPath . parse ( json ) . read ( "$.store.book[?(@.price < 10 && @.category == 'fiction')]" ) ; List < Map < String , Object > > books2 = JsonPath . parse ( json ) . read ( "$.store.book[?(@.category == 'reference' || @.price > 10)]" ) ; print ( "****************books1****************" ) ; printListMap ( books1 ) ; print ( "****************books2****************" ) ; printListMap ( books1 ) ; private static void print ( List < String > list ) { for ( Iterator < String > it = list . iterator ( ) ; it . hasNext ( ) ; ) { System . out . println ( it . next ( ) ) ; private static void printOb ( List < Object > list ) { for ( Iterator < Object > it = list . iterator ( ) ; it . hasNext ( ) ; ) { print ( "****" ) ; System . out . println ( it . next ( ) ) ; private static void printListMap ( List < Map < String , Object > > list ) { for ( Iterator < Map < String , Object > > it = list . iterator ( ) ; it . hasNext ( ) ; ) { Map < String , Object > map = it . next ( ) ; print ( "****" ) ; for ( Iterator iterator = map . entrySet ( ) . iterator ( ) ; iterator . hasNext ( ) ; ) { System . out . println ( iterator . next ( ) ) ; private static void print ( String s ) { System . out . println ( s ) ;

参考文章:
使用jsonpath解析json内容

Java 使用 jsonpath 解析 json 的内容package com.jsonpath;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.util.Iterator;import java.util.List;import java.util.Map;import net.minidev.json.JSONArray; <groupId>com.jayway. jsonpath </groupId> <artifactId> json -path</artifactId> <version>2.2.0</version> </dependency> 2、封装类 import com.jayway. jsonpath .Configuration; import com.
视频及游戏管理平台是一个很好的项目,结合了后端(Spring Boot)和前端(Vue.js)技术,实现了前后端分离。 视频及游戏管理平台是一个很好的项目,结合了后端(Spring Boot)和前端(Vue.js)技术,实现了前后端分离。 视频及游戏管理平台是一个很好的项目,结合了后端(Spring Boot)和前端(Vue.js)技术,实现了前后端分离。 视频及游戏管理平台是一个很好的项目,结合了后端(Spring Boot)和前端(Vue.js)技术,实现了前后端分离。 视频及游戏管理平台是一个很好的项目,结合了后端(Spring Boot)和前端(Vue.js)技术,实现了前后端分离。 视频及游戏管理平台是一个很好的项目,结合了后端(Spring Boot)和前端(Vue.js)技术,实现了前后端分离。
好的,关于 使用 jsonPath 解析 json 的问题,我可以回答你。 jsonPath 是一种用于查询 Json 数据的语言,类似于XPath用于xml,它可以快速定位到 json 数据中特定的节点,从而方便进行操作。 在 Java 中,我们可以 使用 JsonPath 库来 解析 json 数据。首先,需要添加 jsonPath 库的依赖,例如 使用 Maven的话,可以在pom.xml文件中加入以下代码: ```xml <dependency> <groupId>com.jayway. jsonpath </groupId> <artifactId> json -path</artifactId> <version>2.4.0</version> </dependency> 然后,在 Java 代码中,我们可以 使用 以下代码来 解析 json 数据: ``` java String json = "{\"name\":\"John\",\"age\":30,\"cars\":[ \"Ford\", \"BMW\", \"Fiat\" ]}"; JSON Object json Object = new JSON Object( json ); // 先将 json 字符串转为 JSON Object对象 String name = json Object.getString("name"); // 获取name字段的值 int age = json Object.getInt("age"); // 获取age字段的值 JSON Array cars = json Object.get JSON Array("cars"); // 获取cars字段的值,这是一个 JSON Array对象 String firstCar = cars.getString(0); // 获取cars数组中第一个元素的值 System.out.println(name); System.out.println(age); System.out.println(firstCar); 此外, 使用 JsonPath 库,我们也可以通过以下代码来获取 json 数据中特定的节点: ``` java String json = "{\"name\":\"John\",\"age\":30,\"cars\":[ \"Ford\", \"BMW\", \"Fiat\" ]}"; Object document = Configuration.defaultConfiguration(). json Provider().parse( json ); String name = JsonPath .read(document, "$.name"); // 获取name字段的值 int age = JsonPath .read(document, "$.age"); // 获取age字段的值 String firstCar = JsonPath .read(document, "$.cars[0]"); // 获取cars数组中第一个元素的值 System.out.println(name); System.out.println(age); System.out.println(firstCar); 希望我的回答能帮助到你。