如何检查数据编织器中的空条件:Mule
How to Check null condition in Data weaver : Mule
这是我的 xml,首先我需要检查 'RecordsEntries' 不应该是 'null',然后 RecordEntry 不应该是 null
然后是映射代码
<?xml version="1.0" encoding="UTF-8"?>
<Records>
<storenumber />
<calculated>false</calculated>
<subTotal>12</subTotal>
<RecordsEntries>
<RecordEntry>
<deliverycharge>30.0</deliverycharge>
<entryNumber>8</entryNumber>
<Value>true</Value>
</RecordEntry>
<RecordEntry>
<deliverycharge>20.0</deliverycharge>
<entryNumber>7</entryNumber>
<Value>false</Value>
</RecordEntry>
</RecordsEntries>
<RecordsEntries>
<RecordEntry>
<deliverycharge>30.0</deliverycharge>
<entryNumber>8</entryNumber>
<Value>false</Value>
</RecordEntry>
</RecordsEntries>
</Records>
尝试了多个场景也使用了when
条件检查但某处缺少括号或格式不正确
orders: {
order: {
StoreID: payload.Records.storenumber,
Total: payload.Records.calculated,
(( payload.Records.RecordsEntries.*RecordEntry ) map {
IndividualEntry: {
Number:$.entryNumber,
DeliverCharge:$.deliverycharge
}
} when ( payload.Records.RecordsEntries != null and payload.Records.RecordsEntries.*RecordEntry !=null))}
}
出现丢失之类的错误 )
。通过直接在第一个循环内检查空条件来尝试其他方法,得到类似 "Cannot coerce array to an boolean" 的错误。请建议。谢谢。
你可以改为
%dw 1.0
%output application/xml
---
orders: {
order: {
StoreID: payload.Records.storenumber,
Total: payload.calculated,
((payload.Records.*RecordsEntries.*RecordEntry default []) map {
IndividualEntry: {
Number:$.entryNumber,
DeliverCharge:$.deliverycharge
}
})
}
}
DataWeave 是 "null-safe" 用于像 payload.Records.*RecordsEntries.*RecordEntry
中那样查询值,但是当尝试使用 null 进行操作时会抛出错误(例如 null map {}
)。
default
运算符将其左侧的值(如果是 null
)替换为右侧的值。
您还遗漏了 *
。每当您想要所有匹配的重复元素时,您都需要在 xml 中使用它。
如果您想基于 null 或 blank 跳过 dataweave 中的特定字段分配,可以使用下面提到的脚本。
payload map ((payload01, indexOfPayload01) -> { Name: payload01.Name, (LastName: payload01.LastName) when payload01.LastName !=null and payload01.LastName != '' })
如果名称字段在传入有效负载中为空或空白,这将跳过名称的字段映射。
这是我的 xml,首先我需要检查 'RecordsEntries' 不应该是 'null',然后 RecordEntry 不应该是 null
然后是映射代码
<?xml version="1.0" encoding="UTF-8"?>
<Records>
<storenumber />
<calculated>false</calculated>
<subTotal>12</subTotal>
<RecordsEntries>
<RecordEntry>
<deliverycharge>30.0</deliverycharge>
<entryNumber>8</entryNumber>
<Value>true</Value>
</RecordEntry>
<RecordEntry>
<deliverycharge>20.0</deliverycharge>
<entryNumber>7</entryNumber>
<Value>false</Value>
</RecordEntry>
</RecordsEntries>
<RecordsEntries>
<RecordEntry>
<deliverycharge>30.0</deliverycharge>
<entryNumber>8</entryNumber>
<Value>false</Value>
</RecordEntry>
</RecordsEntries>
</Records>
尝试了多个场景也使用了when
条件检查但某处缺少括号或格式不正确
orders: {
order: {
StoreID: payload.Records.storenumber,
Total: payload.Records.calculated,
(( payload.Records.RecordsEntries.*RecordEntry ) map {
IndividualEntry: {
Number:$.entryNumber,
DeliverCharge:$.deliverycharge
}
} when ( payload.Records.RecordsEntries != null and payload.Records.RecordsEntries.*RecordEntry !=null))}
}
出现丢失之类的错误 )
。通过直接在第一个循环内检查空条件来尝试其他方法,得到类似 "Cannot coerce array to an boolean" 的错误。请建议。谢谢。
你可以改为
%dw 1.0
%output application/xml
---
orders: {
order: {
StoreID: payload.Records.storenumber,
Total: payload.calculated,
((payload.Records.*RecordsEntries.*RecordEntry default []) map {
IndividualEntry: {
Number:$.entryNumber,
DeliverCharge:$.deliverycharge
}
})
}
}
DataWeave 是 "null-safe" 用于像 payload.Records.*RecordsEntries.*RecordEntry
中那样查询值,但是当尝试使用 null 进行操作时会抛出错误(例如 null map {}
)。
default
运算符将其左侧的值(如果是 null
)替换为右侧的值。
您还遗漏了 *
。每当您想要所有匹配的重复元素时,您都需要在 xml 中使用它。
如果您想基于 null 或 blank 跳过 dataweave 中的特定字段分配,可以使用下面提到的脚本。
payload map ((payload01, indexOfPayload01) -> { Name: payload01.Name, (LastName: payload01.LastName) when payload01.LastName !=null and payload01.LastName != '' })
如果名称字段在传入有效负载中为空或空白,这将跳过名称的字段映射。