合并两个 JSON 文件,同时求和值

Merging two JSON files while summing up values

我得到两个包含股票信息的不同文件,我想在根据“pid”对数据求和的同时合并到一个文件中。

有效载荷A

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

有效载荷B

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

结果 有效载荷A

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

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

{
  "order": []
}

您可以试试下面的DataWeave表达式:

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

var payloadB = {
  "order": [
    {
      "pid": "c",
      "instock": "2"
    },
    {
      "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
    },
    {
      "pid": "b",
      "instock": 2
    },
    {
      "pid": "c",
      "instock": 4
    },
    {
      "pid": "d",
      "instock": 2
    }
  ]
}