【问题标题】:Dataweave1.0 removing nested elementsDataweave1.0 去除嵌套元素
【发布时间】:2019-09-13 05:38:40
【问题描述】:

我有两个 json 负载,第一个包含映射详细信息,第二个包含需要根据映射负载转换的实际数据

映射负载:

[
  {
    "SourceField": "CUSTOMER_NAME",
    "DestinationField": "Customer"
  },
  {
    "SourceField": "PROJECT_ID",
    "DestinationField": "ProjectID"
  }
]

实际数据负载

[
  {
    "CUSTOMER_NAME":"Smith",
    "PROJECT_ID": 12345
  },
  {
    "CUSTOMER_NAME":"James",
    "PROJECT_ID": 34563
  }
]

我试图得到一个输出

[
 {
   "Customer":"Smith",
   "ProjectID": 12345
 },
 {
   "Customer":"James",
   "ProjectID":34563
 }
]

DW 代码

%dw 1.0
%output application/json
%var mappingPayload = MappingPayload as in above example
%var actualData = ActualDataPayload as in above example
%var mappings = mappingPayload reduce ((env, obj={}) -> obj ++ {(env.SourceField):(env.DestinationField)})
---
actualData map ((object,index)->{
    (index):object mapObject (value,key)->{
        (mappings[key]):value
    }
})

当前输出的问题是我能够将内容映射到预期的键,但它嵌套在索引中,有什么建议可以摆脱嵌套元素吗?

【问题讨论】:

    标签: mule dataweave mulesoft


    【解决方案1】:

    您不需要顶层的对象,只需将其设为包含() 的数组即可。

    %dw 1.0
    %output application/json
    %var mappingPayload = [
      {
        "SourceField": "CUSTOMER_NAME",
        "DestinationField": "Customer"
      },
      {
        "SourceField": "PROJECT_ID",
        "DestinationField": "ProjectID"
      }
    ]
    
    %var actualData = [
      {
        "CUSTOMER_NAME":"Smith",
        "PROJECT_ID": 12345
      },
      {
        "CUSTOMER_NAME":"James",
        "PROJECT_ID": 34563
      }
    ]
    
    %var mappings = mappingPayload reduce ((env, obj={}) -> obj ++ {(env.SourceField):(env.DestinationField)})
    ---
    actualData map (
        $ mapObject {
            (mappings[$$]): $
        }
    )
    

    【讨论】:

      【解决方案2】:

      试试这个..

      %dw 1.0
      %output application/json
      %var mappingPayload = [
        {
          "SourceField": "CUSTOMER_NAME",
          "DestinationField": "Customer"
        },
        {
          "SourceField": "PROJECT_ID",
          "DestinationField": "ProjectID"
        }
      ]
      %var actualData = [
        {
          "CUSTOMER_NAME":"Smith",
          "PROJECT_ID": 12345
        },
        {
          "CUSTOMER_NAME":"James",
          "PROJECT_ID": 34563
        }
      ]
      
      %var mappings = mappingPayload reduce ((env, obj={}) -> obj ++ {(env.SourceField):(env.DestinationField)}) 
      ---
      actualData map ((object,index)->{
      
      a:object mapObject (value,key)->{(mappings[key]):value}
      }.a)
      

      【讨论】:

        【解决方案3】:

        你现有的方法

        actualData map ((object,index)->{
        
        (index):object mapObject (value,key)->{(mappings[key]):value}
        }reduce (index))
        

        【讨论】:

          【解决方案4】:

          而不是

          actualData map ((object,index) -> {
             (index):object mapObject (value,key) -> {(mappings[key]):value}
          }
          

          这样做:

          actualData map ((object,index) -> {
             (object mapObject (value,key) -> {(mappings[key]):value})
          }
          

          【讨论】:

            猜你喜欢
            • 2013-11-22
            • 2014-05-03
            • 2016-02-22
            • 1970-01-01
            • 2022-07-19
            • 1970-01-01
            • 2021-02-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多