首页 > 解决方案 > 将json数组转换为带有内部数组的单个json

问题描述

我从系统收到 json 格式的消息,并希望执行转换以获得以下消息

消息来源:

    [
{
    "OPERATING_COMPANY": "xx",
    "STORE_CLOSING_TIME": "2019-01-03T22:00:00",
    "BATCH_ID": 1812,
    "STORENUMBER": 1197,
    "PROCESS_STATUS": "P"
},
{
   "OPERATING_COMPANY": "xx",
    "STORE_CLOSING_TIME": "2019-01-04T18:00:00",
    "BATCH_ID": 1812,
    "STORENUMBER": 1197,
    "PROCESS_STATUS": "P"
},
{
    "OPERATING_COMPANY": "xx",
    "STORE_CLOSING_TIME": "2019-01-03T22:00:00",
    "BATCH_ID": 1314,
    "STORENUMBER": 1198,
    "PROCESS_STATUS": "P"
},
{
    "OPERATING_COMPANY": "xx",
    "STORE_CLOSING_TIME": "2019-01-04T18:00:00",
    "BATCH_ID": 1314,
    "STORENUMBER": 1198,
    "PROCESS_STATUS": "P"
}]

预期产出

    [
{
    "OPERATING_COMPANY": "xx",
    "STORE_CLOSING_TIME": ["2019-01-03T22:00:00","2019-01-04T18:00:00"],
    "BATCH_ID": 1812,
    "STORENUMBER": 1197,
    "PROCESS_STATUS": "P"
},
{
   "OPERATING_COMPANY": "xx",
    "STORE_CLOSING_TIME": ["2019-01-03T22:00:00","2019-01-04T18:00:00"],
    "BATCH_ID": 1812,
    "STORENUMBER": 1198,
    "PROCESS_STATUS": "P"
}]

我是 dataweave 的新手并尝试使用 map 但无法理解如何实现结果。

标签: muledataweave

解决方案


在 dataweave 中尝试以下操作:

%dw 1.0
%output application/json
%var time=(payload map $.STORE_CLOSING_TIME)  distinctBy $.STORE_CLOSING_TIME 
---
(payload map {

 "OPERATING_COMPANY": $.OPERATING_COMPANY,
 "STORE_CLOSING_TIME": time,
 "BATCH_ID": $.BATCH_ID,
 "STORENUMBER": $.STORENUMBER,
 "PROCESS_STATUS": $.PROCESS_STATUS 
    }) distinctBy $.STORENUMBER 

输出:

[
    {
        "OPERATING_COMPANY": "xx",
        "STORE_CLOSING_TIME": [
            "2019-01-03T22:00:00",
            "2019-01-04T18:00:00"
        ],
        "BATCH_ID": 1812,
        "STORENUMBER": 1197,
        "PROCESS_STATUS": "P"
    },
    {
        "OPERATING_COMPANY": "xx",
        "STORE_CLOSING_TIME": [
            "2019-01-03T22:00:00",
            "2019-01-04T18:00:00"
        ],
        "BATCH_ID": 1314,
        "STORENUMBER": 1198,
        "PROCESS_STATUS": "P"
    }
]

推荐阅读