You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于try.jsonata.org发票数据构建JSONata去重查询

嘿,我来帮你搞定这个需求!其实不用折腾复杂的$map/$reduce,JSONata本身就有简洁的方式处理嵌套数组筛选和去重,咱们一步步来:

核心查询语句

直接用这行就能搞定你要的结果:

$distinct($.Account.Order[Product.Price < 50].OrderID)

拆解一下逻辑

  1. 定位订单数组:$.Account.Order先拿到所有订单的集合
  2. 筛选符合条件的订单:[Product.Price < 50]是JSONata的嵌套谓词语法——它会自动遍历当前Order下的所有Product,只要有任意一个Product的Price小于50,就会选中这个Order(这也是你之前可能没get到的点:不用手动遍历Product数组,JSONata会帮你处理子数组的条件判断)
  3. 提取OrderID:.OrderID把选中订单的ID提取出来,得到一个可能包含重复值的数组
  4. 去重:$distinct(...)对提取出的ID数组去重,最终得到唯一的OrderID列表

更明确的写法(可选)

如果想更清晰地表达“存在至少一个低价Product”,可以用$some函数显式判断,效果和上面完全一致:

$distinct($.Account.Order[$some(Product, $.Price < 50)].OrderID)

举个实际例子验证

假设你的发票数据结构是这样的:

{
  "Account": {
    "Order": [
      {
        "OrderID": "1001",
        "Product": [{"Price": 40}, {"Price": 60}]
      },
      {
        "OrderID": "1002",
        "Product": [{"Price": 55}]
      },
      {
        "OrderID": "1001",
        "Product": [{"Price": 30}]
      },
      {
        "OrderID": "1003",
        "Product": [{"Price": 25}]
      }
    ]
  }
}

运行查询后会得到结果:["1001", "1003"],正好是符合条件的唯一OrderID。

内容的提问来源于stack exchange,提问作者MTH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:12:41