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