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

如何在JSONata中原地迭代修改对象内嵌套数组的amount属性

如何在JSONata中修改嵌套数组字段并保留完整对象结构?

问题背景

我有一个JSON对象,其中policyList是数组类型,它的每个元素下包含product数组。我需要修改product数组中每个对象的amount值,但当前编写的表达式只能输出修改后的amount数组,无法保留完整的原对象结构。

原始JSON数据

{"admissionDate": "2023-10-04","claimCaseId": 123,"claimCaseStatusDescp": "Waiting","claimTypeDescp": "Hospitalization","dischargeDate": "2023-10-20","hospital": "abc","policyList": [{"policyNo": "P1","product": [{"amount": 10243,"claimDecision": "7","claimDecisionDescp": "Pending","productName": "Auto"},{"amount": 1023,"claimDecision": "7","claimDecisionDescp": "Pending","productName": "Mob"},{"amount": 100000,"claimDecision": "8","claimDecisionDescp": "Approved","productName": "PA"}]}],"reasonCode": ""}

错误表达式及当前输出

我之前写的表达式:

$map($.policyList.product.amount, function($amount) {
    $formatNumber($amount,'#,###')
})

当前输出(仅得到格式化后的amount数组):

["10,243","1,023","100,000"]

期望输出

需要保留完整原对象结构,仅更新product中的amount值:

{"admissionDate": "2023-10-04","claimCaseId": 123,"claimCaseStatusDescp": "Waiting","claimTypeDescp": "Hospitalization","dischargeDate": "2023-10-20","hospital": "abc","policyList": [{"policyNo": "P1","product": [{"amount": "10,243","claimDecision": "7","claimDecisionDescp": "Pending","productName": "Auto"},{"amount": "1,023","claimDecision": "7","claimDecisionDescp": "Pending","productName": "Mob"},{"amount": "100,000","claimDecision": "8","claimDecisionDescp": "Approved","productName": "PA"}]}],"reasonCode": ""}

解决方案

使用JSONata的变换操作符(~>)结合数组遍历,实现只修改目标字段、保留其余结构的效果:

正确的JSONata表达式

$ ~> |policyList|{
  "product": $map(product, function($item) {
    $item ~> |{"amount": $formatNumber($item.amount, "#,###")}|
  })
}|

表达式说明

  1. $ ~> |policyList|{...}|:对根对象的policyList数组进行变换,遍历数组中的每个元素。
  2. 对每个policyList元素,重新定义product字段:用$map遍历原product数组。
  3. $item ~> |{"amount": ...}|:对每个product对象,仅更新amount字段(用$formatNumber格式化),其余字段自动保留原始值。

这样就能在修改amount的同时,完整保留整个JSON对象的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:16:15