【问题标题】:How to write JSON Path to get particular value based on string filter?如何编写 JSON 路径以基于字符串过滤器获取特定值?
【发布时间】:2021-06-16 14:48:18
【问题描述】:

我是 JSON 路径的新手,我正在尝试在下面的 JSON 有效负载中使用 JsonPath 获取与 name='Candy' 对应的 'id'。

{
    "responsePayload": [
        {
            "content": {             
                "id": "101",               
                "name": "Candy"                
            },
            "links": [
                {
                    "rel": "self",
                    "link": "api/v1/sweets/101",
                    "id": "101"
                }
            ]
        },
        {
            "content": {                
                "id": "102",               
                "name": "Chocolate"
            },
            "links": [
                {
                    "rel": "self",
                    "link": "api/v1/sweets/102",
                    "id": "102"
                }
            ]
        }
    ]
}

为此,我尝试了 Jsonpath $.responsePayload[0].content[?(@.name=='Candy')].id 但这不起作用。我正在使用https://jsonpath.com/ 来测试这个 JsonPath。请指导我如何达到所需的结果。

【问题讨论】:

    标签: json jsonpath json-path-expression


    【解决方案1】:

    你真的很亲密。您需要更多表达式内的路径。

    $.responsePayload[?(@.content.name=='Candy')].content.id
    

    您在回复中的[0] 仅隔离了第一个元素,但听起来您想遍历responsePayload 中的整个数组。为此,过滤器表达式选择器[?(...)] 必须作用于该数组。

    接下来,@ 代表当前项目,您可以从中构建完整路径。你可以在上面看到它是如何工作的。

    最后,过滤器表达式选择器在表达式返回 true 时返回完整项。因此,您需要再次导航到 .content.id 以获得您想要的值。

    【讨论】:

    • GregsDennis 谢谢你,解释得很好,它的工作原理。
    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2023-04-03
    • 1970-01-01
    • 2022-07-14
    • 2017-03-03
    • 2019-08-16
    相关资源
    最近更新 更多