dataweave 2代码在一台机器上工作,但在其他机器上不工作(相同的操作系统和Anypoint Studio版本)。

问题描述 投票:0回答:1

我有一个问题,从一台电脑复制dataweave 2代码到另一台电脑(Windows 10和Anypoint Studio 7,Mule Server 4.2.2 EE)。

  1. 从电脑上导出jar文件A
  2. 将相同的jar文件导入到电脑B的Anypoint Studio中。
  3. 在B机上对代码进行工作测试
  4. 将B电脑上的变换器代码(dataweave 2)复制到草稿gmail中。
  5. 打开电脑A上的gmail,将代码复制到同一个变压器上。
  6. 有错误--有时只有一个,有时有很多错误。

例如

%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):

任何帮助将是非常感激的。

dataweave mule4
1个回答
0
投票

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"
      ]
    }
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.