如何在JSONata中使用不等于判断进行字符串过滤?
JSONata过滤特定字符串值的正确写法
输入JSON
{"Account": {"Account Name": "Firefly","Order": [{"OrderID": "order103","Product": [{"ProductName": "Hat","Quantity": 2},{"ProductName": "Trilby hat","Quantity": 1}]}]}}
需求
提取所有ProductName不等于'Hat'的值,期望输出:
["Trilby hat"]
原查询问题分析
原查询语句:
Account.Order.Product.ProductName!='Hat'?Account.Order.Product.ProductName
实际输出为["Hat","Trilby hat"],原因是:
Account.Order.Product.ProductName!='Hat'会生成布尔数组[false, true]- JSONata中三元运算符的条件只要数组存在真值,就会执行后续的全部数组返回逻辑,而非逐个过滤元素
正确查询写法
写法一(简洁语法)
直接在Product数组后添加过滤条件,再提取ProductName:
Account.Order.Product[ProductName != 'Hat'].ProductName
写法二(使用$filter函数)
通过$filter函数遍历数组并筛选符合条件的元素:
Account.Order.Product[$filter($, function($v) { $v.ProductName != 'Hat' })].ProductName
两种写法均可得到期望输出:
["Trilby hat"]
内容的提问来源于stack exchange,提问作者Shree
相关产品推荐
相关产品推荐

