如何在JSONata中过滤discount rateplancharge并维持完整数据结构
解决方案:保留层级结构移除指定RatePlanCharge
1. JavaScript/TypeScript 实现
如果是前端或Node.js环境,通过深拷贝原结构后遍历过滤,完整保留层级:
// 假设原始订单数据存储在order变量中 const updatedOrder = JSON.parse(JSON.stringify(order)); // 深拷贝避免修改原数据 updatedOrder.Subscription.rateplans.forEach(rateplan => { // 过滤掉Id为"def"的discount rateplancharge rateplan.rateplancharges = rateplan.rateplancharges.filter(charge => charge.Id !== "def"); }); // updatedOrder即为保留完整结构的目标结果
2. jq命令行工具实现(后端/运维场景)
用jq处理JSON文件时,通过递归修改指定层级的数组,保留整体结构:
jq '.Subscription.rateplans[] |= (.rateplancharges |= map(select(.Id != "def")))' original-order.json > updated-order.json
该命令会遍历所有rateplans节点,在每个节点下过滤掉目标charge,同时完整保留Order、Subscription、rateplan的所有其他字段与层级。
3. 通用思路:完整结构上修改而非提取目标
核心逻辑是不要直接提取目标charge,而是基于完整的订单结构,定位到rateplancharges数组后执行过滤操作:
- 先获取完整的Order对象
- 定位到
Subscription.rateplans下的所有rateplancharges数组 - 对每个数组过滤掉Id为"def"的元素
这种方式既能精准移除目标discount charge,又能完整保留下游流程需要的所有层级结构。
内容的提问来源于stack exchange,提问作者Alan Home
相关产品推荐
相关产品推荐

