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

update function is not working as expected in dataweave 2?

我想更新传入负载中的一行。该字段是 'price'。 我的数据编织脚本是

%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",
                                        "contractNumber": "YYYYYYY",
                                        "contractLineId": "",
                                        "lineNumber": "1",
                                        "name": "132804",
                                        "description": "132804_2",
                                        "quantity": "1",
                                        "price": ".95",
                                        "lineAmount": ".95",
                                        "purchaseOrderNumber": "YYYYYY",
                                        "purchaseOrderDescription": ""
                                    }
                                ]
                            }
                        }
                    }
                }
            ]
        }
    }

但上面的脚本总是以'.92'的收入有效负载价格返回

我得到的输出是;

    [
      [
        {
          "lineItemId": "132804_1",
          "contractNumber": "XXXXXX",
          "contractLineId": "",
          "lineNumber": "1",
          "name": "132804",
          "description": "132804",
          "quantity": "1",
          "price": ".92",
          "lineAmount": ".92",
          "purchaseOrderNumber": "YYYYY",
          "purchaseOrderDescription": ""
        },
,
    {
      "lineItemId": "132804_2",
      "contractNumber": "YYYYYYY",
      "contractLineId": "",
      "lineNumber": "1",
      "name": "132804",
      "description": "132804_2",
      "quantity": "1",
      "price": ".95",
      "lineAmount": ".95",
      "purchaseOrderNumber": "YYYYYY",
      "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 $
    }
    )}
}