我有这个JSON对象:
{
id: {
name: "BBCommercialPropertyStructureFloodCoverage",
},
carrierData: null,
link: [
{
key: "Location",
select: {
key: "ARRAY_INDEX",
value: 0,
},
},
{
key: "structure",
select: {
key: "ARRAY_INDEX",
value: 1,
},
},
{
key: "Coverage",
select: {
key: "ARRAY_INDEX",
value: 0,
},
},
],
},
我有几个具有不同索引值的对象。例如,如果我想与此id/name: "BBCommercialPropertyStructureFloodCoverage"
进行匹配,并且位置也是值0,结构是值1,如何使用jmespath做到这一点?
到目前为止,我已经拥有了:
const floodCoverageQuery = [?id.name=='BBCommercialPropertyStructureFloodCoverage' && link[key=='Location' && select.value==0]] && link[key=="structure" && select.value==1]]
这对吗?
答案 0 :(得分:2)
首先,您放入答案中的对象树不是真正的JSON。我已经对其进行了转换,请参见下文。另外,我认为该对象需要包装在一个列表([...]
)中,因为您说“我有几个这些对象” ;并且“迄今”拥有的jmespath查询以[?...
开头,表示您有一个列表。
这应该可行,我已经在jmespath.org上对其进行了测试:
[?id.name=='BBCommercialPropertyStructureFloodCoverage' && link[?key=='Location' && select.value==`0`] && link[?key=='structure' && select.value==`1`]]
您的原始查询是这样:
[?id.name=='BBCommercialPropertyStructureFloodCoverage' && link[key=='Location' && select.value==0]] && link[key=="structure" && select.value==1]]
这是我发现的:
]
)太多。因此,==0]] &&
应该是==0] &&
(少一个括号)。'
和"
)。仅单引号有效raw string literals。 (或者,您可以编写`"string"`
,相当于'string'
。)`0`
和`1`
内包装整数值(0和1),请参见literal expressions。key
和select.value
的内括号是filter expressions,因此您需要将它们括在[?
和]
内,而不仅仅是[...]
。[
{
"id": {
"name": "BBCommercialPropertyStructureFloodCoverage"
},
"carrierData": null,
"link": [
{
"key": "Location",
"select": {
"key": "ARRAY_INDEX",
"value": 0
}
},
{
"key": "structure",
"select": {
"key": "ARRAY_INDEX",
"value": 1
}
},
{
"key": "Coverage",
"select": {
"key": "ARRAY_INDEX",
"value": 0
}
}
]
}
]