如何使用带有JMESPath的嵌套json的数组中的值进行过滤?
我有这个:如何使用带有JMESPath的嵌套json的数组中的值进行过滤?,json,jmespath,Json,Jmespath,我有这个: { Item: [ { key1: 'one', key2: 'two', key3: ["Sam", "Jack"] }, { key1: 'one', key2: 'two', key3: ["Annie", "Jason"] }
{
Item: [
{
key1: 'one',
key2: 'two',
key3: ["Sam", "Jack"]
},
{
key1: 'one',
key2: 'two',
key3: ["Annie", "Jason"]
}
]
}
所以我想得到一个对象,它的key3
包含“Annie”
。
我想出的最好的表达方式是
项[]。key3[?contain(@,'Annie')=='true']
,它不起作用。我认为你在key1
和key2
之后缺少逗号(,
)
使用javascript:
jsonObject={
项目:[
{
键1:‘一’,
键2:'两',
键3:[“山姆”,“杰克”]
},
{
键1:‘一’,
键2:'两',
键3:[“安妮”,“杰森”]
}
]
};
console.log(
jsonObject.Item.filter(Item=>Item.key3.includes(“Annie”))
);代码>在我看来,JMESPath表达式中出现了多个输入错误和一个大问题
首先,要使JSON完全有效:
你应该使用双引号,而不是单引号
你的名字也应该用双引号括起来
资料来源:
下面是您正确的JSON数据:
{
“项目”:[
{
“键1”:“一”,
“键2”:“两个”,
“键3”:[
“山姆”,
“杰克”
]
},
{
“键1”:“一”,
“键2”:“两个”,
“键3”:[
“安妮”,
“杰森”
]
}
]
}
然后,在JMESPath中有两个输入错误:
您的顶级名称是Item
而不是Items
正确的JMESPath表达式是contains
,而不是contain
最后,可能最重要的问题是您的contains
表达式不正确,它根据字符串测试contains的返回
因此,您必须将包含的返回值与`true`
进行比较
因此,正确的查询结果是:
Item[].key3[?contains(@, `Annie`) == `true`]
其中:
[
[],
[
"Annie"
]
]
对不起,那是个打字错误。非常感谢,但是您能为JMESPath提供一个表达吗?不客气!很抱歉,我无法帮助您使用JMESPath-我还不熟悉它(还…)。