如何解决如何使用带有JMESPath的嵌套json的数组中的值进行过滤?
我有这个:
{
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"
]
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。