如何使用带有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-我还不熟悉它(还…)。