首页 > 解决方案 > 根据过滤器将两个 json 有效负载聚合为一个

问题描述

我正在尝试将两个 json 有效负载聚合为一个。下面的json存储在payload中,

{
   "clients":[
      {
         "status":"IN",
         "clientSoftDeleteIndicator":"N",
         "roles":[
            {
               "clientRoleCodeDesc":"PRIMARY OWNER",
               "clientRoleCode":"PO",
               "roleEffDate":null,
               "clientRoleStatusCode":"IN",
               "clientRoleStatusCodeDesc":"INACTIVE",
               "roleSoftDeleteIndicator":"N",
               "contractID":"49006649"
            },
            {
               "clientRoleCodeDesc":"PRIMARY INSURED",
               "clientRoleCode":"PI",
               "roleEffDate":"2014-11-05",
               "clientRoleStatusCode":"IN",
               "clientRoleStatusCodeDesc":"INACTIVE",
               "roleSoftDeleteIndicator":"N",
               "contractID":"49006649"
            },
             {
               "clientRoleCodeDesc":"PRIMARY INSURED",
               "clientRoleCode":"PI",
               "roleEffDate":"2014-11-05",
               "clientRoleStatusCode":"IN",
               "clientRoleStatusCodeDesc":"INACTIVE",
               "roleSoftDeleteIndicator":"N",
               "contractID":"49006648"
            }
         ],
         "clientID":72341935,
         "statusDate":"2014-11-05",
         "party":{
            "tin4":"0346",
            "addresses":[
               {
                  "addrSoftDeleteIndicator":"N",
                  "city":"HOLLYWOOD",
                  "addressType":null,
                  "zip":"104620000",
                  "country":"U",
                  "line3":null,
                  "line2":null,
                  "line1":"5 MODEL OFFICE",
                  "county":null,
                  "state":"CA",
                  "validIndicator":null,
                  "preferredIndicator":null
               }
            ],
            "firstName":"SALLONARO",
            "middleName":null,
            "lastName":"PARETO",
            "personSoftDeleteIndicator":"N",
            "birthDate":"1987-11-10",
            "sufName":null,
            "preName":"MR",
            "tin":"103380346",
            "taxIdSoftDeleteIndicator":"N",
            "gender":"M",
            "phones":[

            ],
            "martialStatus":null,
            "emails":[

            ],
            "tinType":"U"
         },
         "statusDesc":"INACTIVE"
      }
   ]
}

和下面的 json 存储在 flowVariable contractVariable

{
   "contracts":[
      {
         "policyEffDate":null,
         "productCode":"97",
         "policyStatusDate":"2014-11-05",
         "cntrctSoftDeleteIndicator":"N",
         "contractID":"49006649",
         "adminSysCode":"FCT",
         "dataSourceCode":null,
         "policyStatus":"B3",
         "lobCode":null,
         "contractIssuerCode":null
      },
      {
         "policyEffDate":null,
         "productCode":"98",
         "policyStatusDate":"2015-11-05",
         "cntrctSoftDeleteIndicator":"N",
         "contractID":"49006648",
         "adminSysCode":"FCT",
         "dataSourceCode":null,
         "policyStatus":"B4",
         "lobCode":null,
         "contractIssuerCode":null
      }
   ]
}

当contractId匹配时,我想将属性从flowVariable复制到有效负载中。

下面是我的代码片段,但我得到的只是空的 json

%dw 1.0
%output application/json
---
payload.clients.roles map ((role,index) ->
     {
    contracts: ((flowVars.contractVariable.contracts default []) filter (role.contractID == $.contractID)) 
                                            map ((contract ,indexOf)  -> {
        policyEffDate: contract.policyEffDate,
        productCode: contract.productCode,
        policyStatusDate: contract.policyStatusDate,
        cntrctSoftDeleteIndicator: contract.cntrctSoftDeleteIndicator,
        contractID: contract.contractID,
        adminSysCode: contract.adminSysCode,
        dataSourceCode: contract.dataSourceCode,
        policyStatus: contract.policyStatus,
        lobCode: contract.lobCode,
        contractIssuerCode: contract.contractIssuerCode,
        clientRoleCodeDesc: role.clientRoleCodeDesc,
        clientRoleCode: role.clientRoleCode,
        roleEffDate: role.roleEffDate,
        clientRoleStatusCode: role.clientRoleStatusCode,
        clientRoleStatusCodeDesc: role.clientRoleStatusCodeDesc,
        roleSoftDeleteIndicator: role.roleSoftDeleteIndicator,
        contractID: role.contractID
    })
})  

我得到的输出是

[
  {
    "contracts": [

    ]
  }
]

可以请有人帮助我解决问题所在,我尝试了多种方法但无法使其正常工作。

我还经历了在 Mule ESB 中聚合两个有效负载,这与我的要求相似,但效果不佳。

非常感谢任何帮助。

标签: jsonmuledataweavemule-esb

解决方案


推荐阅读