问题描述
我有这个:
{
Item: [
{
key1: 'one',key2: 'two',key3: ["Sam","Jack"]
},{
key1: 'one',key3: ["Annie","Jason"]
}
]
}
因此,我想获取其key3
包含"Annie"
的对象。
我想出的最佳表达Items[].key3[?contain(@,'Annie') == 'true']
无效。
解决方法
我认为您在,
和key1
之后缺少逗号(key2
)。
使用javascript:
jsonObject= {
Item: [
{
key1: 'one',key2: 'two',key3: ["Sam","Jack"]
},{
key1: 'one',key3: ["Annie","Jason"]
}
]
};
console.log(
jsonObject.Item.filter(item=>item.key3.includes("Annie"))
);
,
在我看来,您有多种错别字,而且JMESPath表达式中有一个大问题。
首先,要使您的JSON完全有效:
- 您应该使用双引号,而不是单引号
- 您的名字也应该用双引号引起来
来源:https://restfulapi.net/json-syntax/
因此,这是您正确的JSON数据:
{
"Item": [
{
"key1": "one","key2": "two","key3": [
"Sam","Jack"
]
},{
"key1": "one","key3": [
"Annie","Jason"
]
}
]
}
然后,在您的JMESPath中,您有两种错别字:
- 您的顶级名称是
Item
而不是Items
- 正确的JMESPath表达式是
contains
而不是contain
最后,但最重要的问题也许是您的contains
表达式不正确,它会在contains
does return a boolean true
or false
时针对字符串 'true'
测试包含的返回。
因此,您必须比较contains
与raw string literal `true`
的收益。
因此您的正确查询最终将是:
Item[].key3[?contains(@,`Annie`) == `true`]
哪个给:
[
[],[
"Annie"
]
]