我有一个问题,从一台电脑复制dataweave 2代码到另一台电脑(Windows 10和Anypoint Studio 7,Mule Server 4.2.2 EE)。
例如
%dw 2.0
output application/json
var addr = payload.PersonInfo.AddressList.Address
---
{
Addresses: if (addr is Object)
[addr] map ( address ) -> {
Suburb: address.City
}
else
addr map ( address ) -> {
Suburb: address.City
}
}
错误指向第一个映射函数 'Invalid input "map (address) -> {\r\n\tSuburb: address.City\r\n\t ", expected Function Call (line 7 column 10):
任何帮助将是非常感激的。
OS没有什么问题--都是datapayload和Dataweave脚本的问题.首先--函数映射是为Array,但错误信息中显示的是String与Object。根据问题,脚本应该期望用Array或String工作,并且应该调整它。
下面是如何做到这一点的例子 https:/simpleflatservice.commule4ChangeStringToJsonOnTheFly.html。
这里是一个例子,它可以如何。玩它,改变输入,看看不同的有效载荷下它的表现。
%dw 2.0
var xAsObject=[{City:'AlbanyObject',State:'NY'},{City:'Seattle',State:'WA'}]
var xAsString='[{"City":"AlbanyString","State":"NY"},{"City":"Seattle","State":"WA"}]'
output application/json
var addr = xAsString
//var addr = xAsObject
---
{
Addresses: if (addr is Array)
[addr] map ( address, index ) -> {
Suburb: address.City
}
else if (addr is String )
( read ( ( addr default '' ), 'application/json' ) ) map ( address, index ) -> {
Suburb: address.City
}
else {Suburb: 'Unknown'}
}
可能的输出是(对于字符串)
{
"Addresses": [
{
"Suburb": "AlbanyString"
},
{
"Suburb": "Seattle"
}
]
}
而对于阵列
{
"Addresses": [
{
"Suburb": [
"AlbanyObject",
"Seattle"
]
}
]
}