【问题标题】:Create sub array in dataweave 2在dataweave 2中创建子数组
【发布时间】:2019-08-05 06:09:20
【问题描述】:

我有一个 json meesage 并且想要得到下面的输出。 输入信息:

[
{
 Header:{
id:12,
dept: HR
},
details:[
{ 
 lineid: 1234,
 acc : "ABC"
},
{ 
 lineid: 98745,
 acc : "cba"
}]
}]

预期输出:

[
 {
 "id": 12,
 "lineid": 1234},
 {
 "id": 12,
 "lineid": 98745
 }
]

使用数据编织:

%dw 2.0
output application/json
---


 payload  map ( payload01 , indexOfPayload01 ) -> {

((payload01.Header map ( payload02, indexOfPayload02 ) -> {
    id: payload01.Header.id,
    lineid: payload02.lineid
} 

) )
} 

我的输出看起来不错,唯一的问题是该值不在子数组下,即

[ { “身份证”:12 “lineid”:1234, “身份证”:12, “lineid”:98745 } ]

【问题讨论】:

    标签: mule mule-component dataweave mule-esb


    【解决方案1】:

    嗨,我在您的脚本中看到两件事一是内部地图应该是详细信息而不是标题(我想这是复制粘贴或将其复制到 stackoverflow 时的问题简化问题,否则它不起作用)。另一个问题是{( 括起来的表达式的使用

    {    
         (
            (payload01.Header map ( payload02, indexOfPayload02 ) -> {
                id: payload01.Header.id,
                lineid: payload02.lineid
            }) 
         )
    }
    

    这种语法扩展对象内部的数组见https://docs.mulesoft.com/mule-runtime/4.1/dataweave-types#dynamic_elements

    所以如果你把它改成

    payload map ((payload01, indexOfPayload01) -> 
      payload01.details map (payload02, indexOfPayload02) -> {
        id: payload01.Header.id,
        lineid: payload02.lineid
      })
    

    它产生

    [
      [
        {
          "id": 12,
          "lineid": 1234
        },
        {
          "id": 12,
          "lineid": 98745
        }
      ]
    ]
    

    【讨论】:

    • 感谢 machaval 的帮助,它工作正常。我添加了 Flatten 以减少父数组 []。是的,这是我在执行复制粘贴时的错误,因为我必须删除一些数据对象来隐藏敏感数据。感谢您的帮助和快速回复。
    猜你喜欢
    • 1970-01-01
    • 2021-01-07
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多