更新功能在 dataweave 2 中没有按预期工作?

问题描述

我想更新传入负载中的一行。该字段是“价格”。 我的 dataweave 脚本是

%dw 2.0

output application/json

---

payload.IntegrationEntities.integrationEntity.integrationEntityDetails.contractutilization.items.item update 
{

    case  price at .price -> "100"
}

我的有效载荷是;

    {
        "IntegrationEntities": {
            "integrationEntity": [
                {
                    "integrationEntityHeader": {
                        "integrationTrackingNumber": "XXXX","referenceCodeForEntity": "132804","additionalInfo": "ADDITIONALINFO"
                    },"integrationEntityDetails": {
                        "contractutilization": {
                            "externalId": "417145","utilizationType": "INVOICE","isDelete": "No","documentNumber": "132804","documentDescription": "","documentDate": "2021-03-26","totalSpendamount": ".92","documentCurrency": "AUD","createdBy": "Oracle Integration","status": "FULLY PAID","items": {
                                "item": [
                                    {
                                        "lineItemId": "132804_1","contractNumber": "YYYYYYY","contractLineId": "","lineNumber": "1","name": "132804","description": "132804","quantity": "1","price": ".92","lineAmount": ".92","purchaSEOrderNumber": "YYYYYY","purchaSEOrderDescription": ""
                                    },{
                                        "lineItemId": "132804_2","description": "132804_2","price": ".95","lineAmount": ".95","purchaSEOrderDescription": ""
                                    }
                                ]
                            }
                        }
                    }
                }
            ]
        }
    }

但上面的脚本总是返回收入有效载荷价格为“.92”

我得到的输出是;

    [
      [
        {
          "lineItemId": "132804_1","contractNumber": "XXXXXX","purchaSEOrderNumber": "YYYYY","purchaSEOrderDescription": ""
        },{
      "lineItemId": "132804_2","purchaSEOrderDescription": ""
    }
      ]
    ]

我的脚本有什么问题?为什么它没有更新我的价格值?为什么我得到部分有效载荷作为输出? 我的要求是,更新价格金额并提供完整的有效负载作为输出

解决方法

试试这个

%dw 2.0
output application/json
---
payload update {
   case item at .IntegrationEntities.integrationEntity[0].integrationEntityDetails.contractUtilization.items.item[0] -> item   update {
       case price at .price -> "100"
   }
}

根据您的要求更新答案:

%dw 2.0
output application/json
---
payload update {

case .IntegrationEntities.integrationEntity[0].integrationEntityDetails.contractUtilization.items.item -> $ map {
    ($ update {
          case .price -> if ($ as Number < 1) "0" ++ $ else $
    }
    )}
}