jsonpath - JSONPath 无法查询条件是否是数组的子属性

我有一个如下的json。我想选择具有方法的项目的列表参考是“方法A”。但我不能用 operator == 查询(用 Jayway JSONPath 评估)

$.items[*].[?(@.methods[*].name == 'method A')].reference

但是当我将运算符替换为包含时, jsonpath 可以工作。

$.items[*].[?(@.methods[*].name contains 'method A')].reference

我不知道为什么 operator == 不起作用。谁能帮我解释一下原因? JSON:

{
    "name": "List codes",
    "items": [
        {            
            "name": "Cash",
            "reference": "CA",
            "methods": [
                {                    
                    "name": "method A",
                    "id": "3543"
                },
                {
                    "name": "method B",
                    "id": "3544"
                }
            ]
        },
        {            
            "name": "Debt",
            "reference": "DE",
            "methods": [
                {                    
                    "name": "method C",
                    "id": "3545"
                },
                {
                    "name": "method B",
                    "id": "3544"
                }
            ]
        },
        {            
            "name": "Property",
            "reference": "PR",
            "methods": [
                {                    
                    "name": "method C",
                    "id": "3545"
                },
                {
                    "name": "method A",
                    "id": "3543"
                }
            ]
        }
    ]
}

回答1

@.methods[*].name 将产生多个结果,从而形成一个数组。您不能使用 == 将 values 列表与字符串进行比较。

如果您需要使用 == 运算符,那么您必须将索引与 || 一起使用

$.items[?(@.methods[0].name == 'method A' || @.methods[1].name == 'method A')].reference

相似文章