【问题标题】:json-path: first element from an array fiilter resultjsonpath:数组过滤结果中的第一个元素
【发布时间】:2018-08-06 11:54:09
【问题描述】:

我是json-path 的新手,但我经常使用xpath。 我的问题是使用json-path 提取由previus 过滤器产生的数组的nth 元素。 例如下面的json

{
    "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
}

我想将第一本书与“小说”类别相匹配

我试过了

$..book[?(@.category=='fiction')][0]

但似乎它不适用于任何在线评估工具。

哪里出错了?

提前致谢。

【问题讨论】:

    标签: json jsonpath json-path-expression


    【解决方案1】:

    您可以尝试将 books 数组映射到满足您条件的列表中,并从那里获取 nth 元素。喜欢:

    List<Map<String, Object>> bookList = JsonPath.parse(your_json).read("$..book[?(@.category=='fiction')]", List.class);
    System.out.println("Printing the nth book = "+expensiveBooks.get(n));
    

    【讨论】:

    • 是的,抱歉,我没有具体说明。以编程方式,我以类似于您建议的方式解决了问题。我只是想知道是否有能够直接提取值的 json-path 语法。谢谢
    • 其实到现在json-path语法还不支持这样的查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2019-05-21
    • 2021-07-19
    • 1970-01-01
    • 2017-01-27
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多