多对一JSON到JSON的转换

时间:2018-06-30 11:55:27

标签: mule dataweave

我需要将一组如下传入的json转换为输出处的通用结构。传入的json的结构如下

输入JSON 1 {     “ JR_ID”:“ 1”,     “ JR_Data”:“一些文字” }

输入JSON 2 {     “ TA_ID”:“ 1”,     “ TA_Data”:“一些文本” }

输入JSON 3

{     “ IM_ID”:“ 1”,     “ IM_Data”:“一些文字” }

..还有更多

输出JSON结构如下

输出结构

{     “ OBJECT_ID”:“ 1”,     “ OBJECT_Data”:“一些文字” }

输入json一次出现一次,任务是将传入JSON的ID字段动态映射到输出JSON的OBJECT_ID,并将其与数据字段相同。

如何为此使用m子表达语言或dataweave?还有其他解决方案吗?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

鉴于您的输入似乎通过*_ID*_Data映射到您的输出,此脚本应为您提供帮助:

%dw 1.0
%output application/json
---
payload pluck ($$ as :string) reduce ((key, out={}) ->
  key match {
    k when key contains "ID"   -> out ++ {"OBJECT_ID":   payload[k]},
    k when key contains "Data" -> out ++ {"OBJECT_Data": payload[k]},
    default                    -> out  
  }
)

这是在首先获取输入对象(payload pluck ($$ as :string))中所有键的列表。强制转换as :string是为了让我们以后可以测试键是否包含某个子字符串。然后,我们使用reduce来构建所需的输出对象,方法是在输入键包含OBJECT_ID时向输出对象添加一个"ID" key:value对,并添加一个{{ 1}}键:键包含OBJECT_Data时输出对象的值对。

答案 1 :(得分:0)

您可以使用以下dataweave语法动态映射JSON输入:

%dw 1.0
%output application/json
---
{
    OBJECT_ID : payload[0],
    OBJECT_Data : payload[1]
}