我在JSON Payload上使用dataweave转换时遇到错误。 JSON Payload是
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
app: ['babel-polyfill', './src/main.js']
},
上面的有效负载由RESTful服务返回,我在使用byteArray到Object转换器之前将其转换为对象,然后再应用以下数据转换
{
"requestId": "13431#1638a2abfb8",
"result": [
{
"batchId": 1028,
"importId": "1028",
"status": "Queued"
}
],
"success": true
}
我期待结果对象只有一条记录,我检查数组是否为null或其大小是否为> 0。执行转换代码时出现以下错误。不知道这里有什么问题。
我期待转换的以下输出,但我在执行转换代码时遇到错误
%dw 1.0
%output application/json
---
batchexecution:
{
batchid:payload.result[0].batchid,
status: payload.result[0].status,
success:payload.success
} when ((payload.result != null) and (sizeOf payload.result > 0))
otherwise
{
batchid: 0,
status:"Not queued",
success:false
}
但是我收到以下错误你无法比较type :: array的值。
{
"batchexecution": {
"batchId": 1028,
"status": "Queued",
"success": true
}
}
答案 0 :(得分:1)
这里的问题并不明显,但我之前遇到过同样的问题 - 它与 sizeOf 函数有关,而且Mule对其某些运算符应用优先级的方式很差。当你说(sizeOf payload.result > 0)
它首先试图解决payload.result > 0
表达式时 - 因此你看到的错误(它试图将数组比较为0)。
请改用((sizeOf payload.result) > 0)
(因为这个原因,我总是在括号中包围 sizeOf )。
作为旁注,您有batchid:payload.result[0].batchid
- 它应为batchId:payload.result[0].batchId
(batchId
中的大小写)
答案 1 :(得分:0)
无论何时在dataweave中使用诸如sizeOf
之类的任何函数时,都应尝试使用圆括号将其封装,以避免此类错误。
@ghoshyTech您的情况
when ((payload.result != null) and ((sizeOf payload.result) > 0))