在汇总值时合并两个 JSON 文件

问题描述

我得到两个不同的文件,其中包含股票信息,我想在汇总数据时将它们合并到一个文件中,基于“pid”。

有效载荷A

{
  "order": [
    {
      "pid": "a","instock": "2"
    },{
      "pid": "b",{
      "pid": "c","instock": "2"
    }
  ]
}

有效载荷B

{
  "order": [
    {
      "pid": "c",{
      "pid": "d","instock": "2"
    }
  ]
}

结果 有效载荷A

{
  "order": [
    {
      "pid": "a","instock": "4"
    },"instock": "2"
    }
  ]
}

但我正在努力解决的是边缘情况:

  • pid 可能同时存在于两个数据集中,也可能只存在于其中一个数据集中
  • payloadB 可能为空
{
  "order": []
}

解决方法

您可以尝试以下 DataWeave 表达式:

%dw 2.0
output application/json
import * from dw::core::Arrays
var payloadA = {
  "order": [
    {
      "pid": "a","instock": "2"
    },{
      "pid": "b",{
      "pid": "c","instock": "2"
    }
  ]
}

var payloadB = {
  "order": [
    {
      "pid": "c",{
      "pid": "d","instock": "2"
    }
  ]
}

---
"order": outerJoin(payloadA.order,payloadB.order,(itemA) -> itemA.pid,(itemB) -> itemB.pid) map (item,index) -> {
    "pid": item.l.pid default item.r.pid,"instock": (item.l.instock default 0) + (item.r.instock default 0)
}

输出:

{
  "order": [
    {
      "pid": "a","instock": 2
    },"instock": 4
    },"instock": 2
    }
  ]
}