首页 > 解决方案 > 动态查找后向 JSON 数组添加新项目

问题描述

下面给出了我的示例有效负载。

{
  "Identifier": "1111111111",
  "Type": "Test",
  "Codes": [
    {
      "CodeId": "112233-ABC",
      "Code": {
        "ID": "112233",
        "Name": "ABC"
      }
    },
    {
      "CodeId": "445566-DEF",
      "Code": {
        "ID": "445566",
        "Name": "DEF"
      }
    },
    {
      "CodeId": "778899-GHI",
      "Code": {
        "ID": "778899",
        "Name": "GHI"
      }
    }
  ]
}

我有 2 个会话变量,如下所示:

%var var1 = 
{
  "112233": "900123",
  "445566": "900456",
  "778899": "900789"
}

%var var2 = 
{
  "value": [
    {
      "Desc": "Alpha",
      "TempId": 900123
    },
    {
      "Desc": "Bravo",
      "TempId": 900456
    },
    {
      "Desc": "Charlie",
      "TempId": 900789
    }
  ]
}

我需要对这两个变量进行动态查找并将新属性添加到主有效负载,如下所示:

{
  "Identifier": "1111111111",
  "Type": "Test",
  "Codes": [
    {
      "CodeId": "112233-ABC",
      "Code": {
        "ID": "112233",
        "Name": "ABC",
        "Description": "Alpha"
      }
    },
    {
      "CodeId": "445566-DEF",
      "Code": {
        "ID": "445566",
        "Name": "DEF",
        "Description": "Bravo"
      }
    },
    {
      "CodeId": "778899-GHI",
      "Code": {
        "ID": "778899",
        "Name": "GHI",
        "Description": "Charlie"
      }
    }
  ]
}

这个想法是使用var1 中的值对 var2 中的TempId执行查找并获取Desc。这必须通过与 ID 匹配来添加到代码数组中。如果没有找到值,则插入 null。我在 dataweave 1.0

提前致谢

标签: mulemule-studiomule-componentdataweaveanypoint-studio

解决方案


你可以试试下面的脚本。有两个查找,第一个是 fromvar获取TempId然后第二个是添加Desc字段

%dw 1.0
%input payload application/json
%output application/json
%var var1 = 
{
  "112233": "900123",
  "445566": "900456",
  "778899": "900789"
}
%var var2 = 
{
  "value": [
    {
      "Desc": "Alpha",
      "TempId": 900123
    },
    {
      "Desc": "Bravo",
      "TempId": 900456
    },
    {
      "Desc": "Charlie",
      "TempId": 900789
    }
  ]
}
%var var2Grouped = var2.value groupBy $.TempId
%function addDesc(id) var2Grouped[var1[id]][0].Desc  default {}
---
{
  Identifier: payload.'Identifier',
  'Type': payload.'Type',
  "Codes": payload."Codes" map ((code) -> {
    CodeId: code.CodeId,
    Code: code.Code ++ addDesc(code.Code.ID)
  })
}

推荐阅读