繁体   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