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

如何使用Jsonata从两个对象数组中筛选SUCCESS状态的对应属性?

解决Jsonata筛选匹配数组元素的问题

原始数据结构

{"first-array": [{"param1": {"status": "SUCCESS"}}, {"param2": {"status": "FAILURE"}}, {"param3": {"status": "SUCCESS"}}], "second-array": [{"param1": {"attribute1": "1", "attribute2": "2"}}, {"param2": {"attribute3": "3", "attribute4": "4"}}, {"param3": {"attribute5": "5", "attribute6": "6"}}]}

目标结果

[{"param1": {"attribute1": "1", "attribute2": "2"}}, {"param3": {"attribute5": "5", "attribute6": "6"}}]

可行的Jsonata查询表达式

second-array[ $keys($) in $first-array.*[status = "SUCCESS"] ~> $keys() ]

表达式拆解

  1. 提取成功状态的参数名:$first-array.*[status = "SUCCESS"] ~> $keys()

    • first-array.* 展开数组内的每个对象,取出包含status的属性值
    • [status = "SUCCESS"] 过滤出状态为SUCCESS的项
    • ~> $keys() 提取这些项对应的外层键名,最终得到数组 ["param1", "param3"]
  2. 筛选second-array对应项:second-array[ $keys($) in ... ]

    • $keys($) 获取当前second-array元素的键名(比如第一个元素的键是param1)
    • in 判断该键是否在第一步得到的成功参数名数组中,符合条件的元素会被保留

你之前尝试的问题解析

  • 使用merge出现覆盖:merge是针对对象的合并逻辑,当多个对象有同名键时会直接覆盖,而你的需求是保留数组中独立的元素对象,merge不适用该场景。
  • first-array.*[status = "SUCCESS"]丢失键:这个表达式只提取了status对应的对象值,没有保留外层的param1/param3键名,无法和second-array的键做对应匹配,必须用$keys()提取键名才能完成关联筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:09:22