2017-11-01 10 views
0

2つの異なるJsonデータストリームのJavaマップを構築しています。しかしストリームの1つは、量でヌル値が含まれている場合、フローは次の条件を使用してエラーますMule Dataweave nullにa:numberを強制することはできません。

($.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 

理想的なシナリオはここで反復内のNULL値を無視することになるdataweaveはそのままの通りである:

ここで
%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 

答えて

0

はあなたの問題を解決し、デフォルト値を設定します。たとえば 、あなたがこのようなペイロードを渡した場合:

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

あなたは数に値のキーを変換するか、またはこれに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" 
関連する問題