如何使用JMESPATH查询匹配指定物品的用户姓名信息?
JMESPATH 筛选拥有指定物品的用户信息
原始数据
{ "Record": [ { "FirstName": "John", "LastName": "Smith", "City": "Chicago", "Possessions": [ { "Item": "TV" }, { "Item": "XBOX-S" }, { "Item": "DVR" }, { "Item": "Setup Box" } ] }, { "FirstName": "Jane", "LastName": "Doe", "City": "Seattle", "Possessions": [ { "Item": "DVR" }, { "Item": "PS5" }, { "Item": "FireStick" } ] }, { "FirstName": "Jane", "LastName": "Lee", "City": "Dallas", "Possessions": [ { "Item": "TV" }, { "Item": "PS5" }, { "Item": "FireStick" } ] } ] }
需求说明
筛选出拥有物品TV的用户,仅获取其FirstName和LastName字段,此前尝试的Record[?contains(Possessions[].Item, TV) == true]语句无法生效。
正确查询语句及结果
1. 返回数组形式的字段值
Record[?Possessions[?Item == 'TV']].[FirstName, LastName]
结果:
[ ["John", "Smith"], ["Jane", "Lee"] ]
2. 返回键值对形式的结果(更易读)
Record[?Possessions[?Item == 'TV']].{FirstName: FirstName, LastName: LastName}
结果:
[ { "FirstName": "John", "LastName": "Smith" }, { "FirstName": "Jane", "LastName": "Lee" } ]
原语句失效原因
原语句中contains(Possessions[].Item, 'TV')的问题在于:Possessions[].Item会生成一个数组(比如["TV", "XBOX-S", ...]),而JMESPATH的contains函数仅支持检查字符串是否包含子串,不支持检查数组是否包含元素,因此该表达式无法正确匹配。
内容的提问来源于stack exchange,提问作者Arshdeep
相关产品推荐
相关产品推荐

