我有一个如下的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