【问题标题】:Dataweave - Dynamically splitting a name field in a mappedObjectDataweave - 在 mappedObject 中动态拆分名称字段
【发布时间】:2020-12-11 08:06:34
【问题描述】:

我试图在我的有效负载中拆分一个名称字段,我首先按 partnerRole 过滤它,然后映射对象,在映射中我想说“如果键等于'Name1',则将 splitName 函数输出为 firstName和姓氏,否则只需要普通的键值对即可。

这是我的有效载荷:

 {   "Partners": [
    {
      "PartnerRole": "ZF",
      "Name1": "BVG Smith",
      "LovesGUID": "",
      "Phone": "7776668888",
      "Email": "",
      "ExternalAcct": "",
      "PaymentType": "",
      "PartnerDescription": "TCDriverInfo",
      "LoyaltyNo": "",
      "AccountGroup": "ZONC"
    }   
] 
}

我的映射对象似乎出了问题,这是我的数据编织:

%dw 2.0
output application/json
fun splitName(Name) = Name splitBy (" ")
var driver = ((payload.Partners filter ((partner) ->
                partner.PartnerRole == 'ZF'))[0]) 
                    mapObject (value,key,index) -> do {
                        if((key) != 'Name1')
                            {(key):(value)}
                        else
                            {"firstName":splitName(value)[0], "lastName":splitName(value)[-1]}
                    }  
---
{
    driver: driver
}

并输出这个 json:

{  
 "driver": {
    "PartnerRole": "ZF",
    "Name1": "AVG Smith",
    "LovesGUID": "",
    "Phone": "7776668888",
    "Email": "",
    "ExternalAcct": "",
    "PaymentType": "",
    "PartnerDescription": "ODriverInfo",
    "LoyaltyNo": "",
    "AccountGroup": "ZTNC"   } 
}

我希望能够输出为 driver.firstName 和 driver.lastName。

我哪里做错了?

【问题讨论】:

    标签: object if-statement dynamic conditional-statements dataweave


    【解决方案1】:

    mapObject 中的key 实际上是Key 类型,并且不能直接与String 类型进行相等性比较。您可以将其转换为字符串然后进行比较,即

    if((key as String) != 'Name1')
    

    您也可以使用~= 运算符。 Documentation

    尽管在这种情况下,您必须更改 if-else 语句才能使用它。

    【讨论】:

    • 没错.. 它给出了想要的结果` if((key as String) != 'Name1')`
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2013-11-14
    相关资源
    最近更新 更多