如何使用JMESPath实现不区分大小写的字符串搜索?
JMESPath 不区分大小写搜索实现方案
需求说明
需要在JSON数组中查找所有包含foo的元素,不区分大小写,示例数组如下:
[ "foo", "foobar", "barfoo", "bar", "baz", "barbaz", "FOO" ]
原有区分大小写的查询[?contains(@, 'foo')]只能匹配到全小写的结果,会遗漏"FOO"这类大写形式的匹配项。
解决方案
利用JMESPath内置的to_lower()(转全小写)或to_upper()(转全大写)函数,统一待匹配元素和搜索关键词的大小写后再执行包含判断,具体查询语句如下:
[?contains(to_lower(@), to_lower('foo'))]
如果搜索关键词固定为全小写foo,也可以简化为:
[?contains(to_lower(@), 'foo')]
结果验证
执行上述查询后,示例数组的返回结果为:
["foo", "foobar", "barfoo", "FOO"]
完全符合不区分大小写的搜索需求。
扩展场景
如果需要在对象数组中搜索指定字段,例如匹配所有name属性包含foo(不区分大小写)的元素,写法如下:
[?contains(to_lower(name), to_lower('foo'))]
内容的提问来源于stack exchange,提问作者HKTonyLee
相关产品推荐
相关产品推荐

