在Java中,使用JsonPath庫處理復雜查詢非常簡單。首先,你需要將JsonPath庫添加到項目的依賴中。如果你使用的是Maven,可以在pom.xml文件中添加以下依賴:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.6.0</version>
</dependency>
接下來,你可以使用以下代碼示例來處理復雜查詢:
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import org.junit.Test;
import java.io.IOException;
import java.util.Map;
import static com.jayway.jsonpath.JsonPath.read;
public class JsonPathComplexQueryTest {
@Test
public void complexQueryTest() throws IOException {
String json = "{\n" +
" \"store\": {\n" +
" \"book\": [\n" +
" {\"category\": \"reference\", \"author\": \"Nigel Rees\", \"title\": \"Sayings of the Century\", \"price\": 8.95},\n" +
" {\"category\": \"fiction\", \"author\": \"Evelyn Waugh\", \"title\": \"Sword of Honour\", \"price\": 12.99},\n" +
" {\"category\": \"fiction\", \"author\": \"Herman Melville\", \"title\": \"Moby Dick\", \"isbn\": \"0-553-21311-3\", \"price\": 8.99}\n" +
" ],\n" +
" \"bicycle\": {\n" +
" \"color\": \"red\",\n" +
" \"price\": 19.95\n" +
" }\n" +
" }\n" +
"}";
DocumentContext documentContext = JsonPath.parse(json);
// 查詢所有書籍的標題
String[] bookTitles = documentContext.read("$.store.book[*].title");
System.out.println("Book Titles: " + java.util.Arrays.toString(bookTitles));
// 查詢價格小于10的書籍
Map<String, Object> booksWithPriceLessThan10 = documentContext.read("$.store.book[?(@.price < 10)]");
System.out.println("Books with price less than 10: " + booksWithPriceLessThan10);
// 查詢作者為Nigel Rees的書籍
Map<String, Object> booksByNigelRees = documentContext.read("$.store.book[?(@.author == 'Nigel Rees')]");
System.out.println("Books by Nigel Rees: " + booksByNigelRees);
// 查詢ISBN為0-553-21311-3的書籍
Map<String, Object> bookWithSpecificISBN = documentContext.read("$.store.book[?(@.isbn == '0-553-21311-3')]");
System.out.println("Book with ISBN 0-553-21311-3: " + bookWithSpecificISBN);
}
}
在這個示例中,我們使用JsonPath庫解析了一個包含書籍和自行車的JSON字符串。然后,我們使用各種查詢表達式來提取所需的信息。這些查詢表達式包括:
$.store.book[*].title
$.store.book[?(@.price < 10)]
$.store.book[?(@.author == 'Nigel Rees')]
$.store.book[?(@.isbn == '0-553-21311-3')]
通過這種方式,你可以使用JsonPath庫輕松處理復雜查詢。