如何使用java搜索/查找JSON

Ssi*_*ire 8 java simplejson rest-assured rest-assured-jsonpath

我从下面有一个下面的JSON字符串我想在JSON字符串中查找/搜索条件.

1).查找存在的键数.2).获取给定键的值(如果我们有数组)

{
"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
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找像Groovy GPath Syntax这样的解决方案

  • store.book - 此数组的大小.
  • store.book [*] .category - 数组中密钥的出现次数.
  • store.bicycle - 如果发现它必须返回true值

Joh*_*han 12

您还可以使用REST Assured提供的JsonPath项目.此JsonPath项目使用Groovy GPath表达式.在Maven你可以这样依赖它:

<dependency>
    <groupId>com.jayway.restassured</groupId>
    <artifactId>json-path</artifactId>
    <version>2.4.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

例子:

要获取所有图书类别的列表:

List<String> categories = JsonPath.from(json).get("store.book.category");
Run Code Online (Sandbox Code Playgroud)

获得第一本书类别:

String category = JsonPath.from(json).get("store.book[0].category");
Run Code Online (Sandbox Code Playgroud)

获取最后一本书类别:

String category = JsonPath.from(json).get("store.book[-1].category");
Run Code Online (Sandbox Code Playgroud)

获取价格在5到15之间的所有书籍:

List<Map> books = JsonPath.from(json).get("store.book.findAll { book -> book.price >= 5 && book.price <= 15 }");
Run Code Online (Sandbox Code Playgroud)

GPath非常强大,您可以在路径表达式中使用更高阶函数和所有Groovy数据结构.