簡體   English   中英

Mule Dataweave無法將:null強制為:number

[英]Mule Dataweave Cannot coerce a :null to a :number

我正在構建兩個不同的Json數據流的Java映射。 但是,如果其中一個流的數量中包含空值,則該流將因以下情況而出錯:

 ($.itemid) : '"' ++ skuLookup[$.sku][0].qty as :number as :string {format: "#.0000"} ++ '"'
                                                                         ^
 Cannot coerce a :null to a :number 
 (com.mulesoft.weave.mule.exception.WeaveExecutionException). Message payload is of type: String

理想的情況是忽略迭代中的空值。這是未修改的數據結構:

  %output application/java
  %var skuLookup =  flowVars.SSRCreateStarshipItems groupBy $.sku
  ---
  flowVars.SSRGetOrderItems map ({
  ($.itemid) : '"' ++ skuLookup[$.sku][0].qty as :number as :string 
  {format: "#.0000"} ++ '"'
  })

這是我的理想解決方案,但是我似乎無法使其正常工作:

  %output application/java
  %var skuLookup =  flowVars.SSRCreateStarshipItems groupBy $.sku
  ---
  flowVars.SSRGetOrderItems map ({
  ($.itemid) : '"' ++ skuLookup[$.sku][0].qty as :number as :string 
  {format: "#.0000"} ++ '"'
  }) when skuLookup[$.sku][0].qty != null

設置默認值可以解決您的問題。 例如,如果您要傳遞這樣的有效負載:

{
    "testMap": [
        {
            "testName": "TestName",
            "Value": "3"
        },
        {
            "testName": "TestName",
            "Value": null
        }
    ]
}

您可以將Value鍵轉換為數字或使用以下方法傳遞null:

%dw 1.0
%input payload application/json
%output application/json
---
payload.testMap map (data, index) -> {

  testName: data.testName,
  Value: data.Value as :number as :string {format: "#.0000"} default null
}

結果如下:

[
  {
    "testName": "TestName",
    "Value": "3.0000"
  },
  {
    "testName": "TestName",
    "Value": null
  }
]

另外,如果要完全刪除密鑰,請將其插入json的輸出標頭之后:

skipNullOn="everywhere"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM