问题陈述:我们面临着处理复杂对象数组的任务,其中每个对象都包含嵌套子对象.我们的目标是解开这种 struct 并创建一个新的数组,该数组由这些嵌套 struct 中的单个元素组成.这种转换对于简化数据处理和实现更有效的数据分析和操作是必要的.

Input.json

{
  "link": [],
  "record": 1,
  "pageSize": 10,
  "matchedEntities": [
    {
      "busEntity": {
        "ContactView": {
          "idObject": "6940205       ",
          "ApplicationId": "CNT01",
          "clnsdNm": "Jhon cena",
          "certifiedContact": {
            "id": "2",
            "CertifiedContactDesc": "Uncertified"
          },
          "PtPostalAdd": {
            "item": [
              {
                "id": "3149850       ",
                "label": " Postal Address",
                "mainAddrCd": {
                  "id": "3             ",
                  "label": "Lookup Postal Address Type",
                  "addrTypDesc": "Primary",
                  "addrTyp": "P"
                },
                "mdmOpsAddrInd": {
                  "rowidObject": "2",
                  "label": "Lookup Postal Address Type",
                  "addrTypDesc": "Not Appliacble",
                  "addrTyp": "N"
                },
                "PostalAddress_rowidObject": "3209850",
                "PostalAddress": {
                  "rowidObject": "237",
                  "srcAddrln1": "BERNARDELLI",
                  "srcCity": "PORTO",
                  "srcState": "RJ",
                  "srcPstlCd": "5600re",
                  "srcCountryCd": {
                    "rowidObject": "32            ",
                    "label": "Lookup Source Country",
                    "cntryCd": "BR",
                    "cntryDesc": "Brazil"
                  },
                  "addrLn1": "2000 RUA FERNANDO BERNARDELLI",
                  "city": "PORTO REAL",
                  "state": "RJ",
                  "pstlCd": "27570000",
                  "countryCd": {
                    "cntryDesc": "Brazil",
                    "cntryCd": "BR"
                  }
                }
              },
              {
                "id": "43",
                "label": " Postal Address 2",
                "mainAddrCd": {
                  "id": "3             ",
                  "label": "Lookup Postal Address Type",
                  "addrTypDesc": "Primary",
                  "addrTyp": "P"
                },
                "mdmOpsAddrInd": {
                  "addrTypDesc": "Not Appliacble",
                  "addrTyp": "N"
                },
                "PostalAddress_id": "23",
                "PostalAddress": {
                  "srcAddrln1": "test",
                  "srcCity": "test",
                  "srcState": "test",
                  "srcPstlCd": "5600re",
                  "srcCountryCd": {
                    "rowidObject": "32            ",
                    "label": "Lookup Source Country",
                    "cntryCd": "BR",
                    "cntryDesc": "Brazil"
                  },
                  "addrLn1": "2000 RUA FERNANDO BERNARDELLI",
                  "city": "PORTO REAL",
                  "state": "RJ",
                  "pstlCd": "27570000",
                  "countryCd": {
                    "cntryDesc": "Brazil",
                    "cntryCd": "BR"
                  }
                }
              }
            ]
          }
        }
      },
      "matchRule": "MRS Contact Search Match|1",
      "matchScore": "100"
    },
    {
      "busEntity": {
        "ContactView": {
          "id": "6940205       ",
          "ApplicationId": "CNT02",
          "clnsdNm": "Alexis Vieira",
          "certifiedContact": {
            "CertifiedContactDesc": "Uncertified"
          },
          "PtPostalAdd": {
            "item": [
              {
                "id": "3149850       ",
                "label": " Postal Address",
                "mainAddrCd": {
                  "id": "3             ",
                  "label": "Lookup Postal Address Type",
                  "addrTypDesc": "Primary",
                  "addrTyp": "P"
                },
                "mdmOpsAddrInd": {
                  "addrTypDesc": "Not Appliacble",
                  "addrTyp": "N"
                },
                "PostalAddress_rowidObject": "3209850",
                "PostalAddress": {
                  "srcAddrln1": "BERNARDELLI",
                  "srcCity": "PORTO",
                  "srcState": "RJ",
                  "srcPstlCd": "5600re",
                  "srcCountryCd": {
                    "rowidObject": "32            ",
                    "label": "Lookup Source Country",
                    "cntryCd": "BR",
                    "cntryDesc": "Brazil"
                  },
                  "addrLn1": "2000 RUA FERNANDO BERNARDELLI",
                  "city": "PORTO REAL",
                  "state": "RJ",
                  "pstlCd": "27570000",
                  "countryCd": {
                    "cntryDesc": "Brazil",
                    "cntryCd": "BR"
                  }
                }
              }
            ]
          }
        }
      }
    }
  ],
  "facet": []
}

100


{
  "partyContact" : {
    "cntId" : [ "CNT01", "CNT02" ],
    "cntName" : [ "Jhon cena", "Alexis Vieira" ],
    "certifiedContact" : [ "Uncertified", "Uncertified" ]
  },
  "postalAddress" : [ {
    "mainAddrCd" : [ "Primary", "Primary" ],
    "addressType" : [ "Not Appliacble", "Not Appliacble" ],
    "srcAddrLn1" : [ "BERNARDELLI", "BERNARDELLI" ],
    "srcCity" : [ "PORTO", "PORTO" ],
    "srcState" : [ "RJ", "RJ" ],
    "srcPstlCd" : [ "5600re", "5600re" ],
    "addressLine1" : [ "2000 RUA FERNANDO BERNARDELLI", "2000 RUA FERNANDO BERNARDELLI" ],
    "city" : [ "PORTO REAL", "PORTO REAL" ],
    "state" : [ "RJ", "RJ" ],
    "postal_Code" : [ "27570000", "27570000" ],
    "srcCountryCd" : [ "BR", "BR" ]
  }, {
    "mainAddrCd" : "Primary",
    "addressType" : "Not Appliacble",
    "srcAddrLn1" : "test",
    "srcCity" : "test",
    "srcState" : "test",
    "srcPstlCd" : "5600re",
    "addressLine1" : "2000 RUA FERNANDO BERNARDELLI",
    "city" : "PORTO REAL",
    "state" : "RJ",
    "postal_Code" : "27570000",
    "srcCountryCd" : "BR"
  } ]
}


100

[
  {
    "operation": "shift",
    "spec": {
      "matchedEntities": {
        "*": {
          "busEntity": {
            "ContactView": {
              "ApplicationId": "partyContact.cntId",
              "clnsdNm": "partyContact.cntName",
              "certifiedContact": {
                "CertifiedContactDesc": "partyContact.certifiedContact"
              },
              "PartyAlternateId": {
                "item": {
                  "*": {
                    "altIdType": {
                      "idTyp": {
                        "0002": {
                          "@(3,altIdVal)": "partyContact.partyUid"
                        },
                        "0008": {
                          "@(3,altIdVal)": "partyContact.metalPortalUserId"
                        },
                        "0011": {
                          "@(3,altIdVal)": "partyContact.ecpPortalUserId"
                        }
                      }
                    }
                  }
                }
              },
              "PtPostalAdd": {
                "item": {
                  "*": {
                    "mainAddrCd": {
                      "addrTypDesc": "postalAddress[&2].mainAddrCd"
                    },
                    "mdmOpsAddrInd": {
                      "addrTypDesc": "postalAddress[&2].addressType"
                    },
                    "PostalAddress": {
                      "srcAddrln1": "postalAddress[&2].srcAddrLn1",
                      "srcAddrln2": "postalAddress[&2].srcAddrLn2",
                      "srcAddrln3": "postalAddress[&2].srcAddrLn3",
                      "SrcAddrln4": "postalAddress[&2].srcAddrLn4",
                      "srcCity": "postalAddress[&2].srcCity",
                      "srcState": "postalAddress[&2].srcState",
                      "srcPstlCd": "postalAddress[&2].srcPstlCd",
                      "srcSystem": "postalAddress[&2][&2].srcSystem",
                      "srcDoNotStd": "postalAddress[&2].srcDoNotStd",
                      "addrId": "postalAddress[&2].addressId",
                      "addrLn1": "postalAddress[&2].addressLine1",
                      "addrLn2": "postalAddress[&2].addressLine2",
                      "addrLn3": "postalAddress[&2].addressLine3",
                      "addrLn4": "postalAddress[&2].adddressLine4",
                      "city": "postalAddress[&2].city",
                      "county": "postalAddress[&2].county",
                      "state": "postalAddress[&2].state",
                      "pstlCd": "postalAddress[&2].postal_Code",
                      "countryCd": {
                        "cntryCd": "postalAddress[&3].srcCountryCd"
                      },
                      "vldtnStsCd": "postalAddress[&2].validation_Status_Code",
                      "enrchdInd": "postalAddress[&2].enrichedIndicator"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

100

[
  {
    "partyContact": {
      "cntId": "CNT01",
      "cntName": "Alexis Vieira",
      "certifiedContact": "Uncertified",
      "partyUid": "980",
      "postalAddress": [
        {
          "mainAddrCd": "Primary",
          "addressType": "Not Appliacble",
          "srcAddrLn1": "test",
          "srcCity": "test",
          "srcState": "test",
          "srcPstlCd": "5600re",
          "addressLine1": "2000 RUA FERNANDO BERNARDELLI",
          "city": "PORTO REAL",
          "state": "RJ",
          "postal_Code": "27570000",
          "srcCountryCd": "BR"
        },
        {
          "mainAddrCd": "Primary",
          "addressType": "Not Appliacble",
          "srcAddrLn1": "test",
          "srcCity": "test",
          "srcState": "test",
          "srcPstlCd": "5600re",
          "addressLine1": "2000 RUA FERNANDO BERNARDELLI",
          "city": "PORTO REAL",
          "state": "RJ",
          "postal_Code": "27570000",
          "srcCountryCd": "BR"
        }
      ]
    }
  },
  {
    "partyContact": {
      "cntId": "CNT02",
      "cntName": "Alexis Vieira",
      "certifiedContact": "Uncertified",
      "partyUid": "980",
      "postalAddress": [
        {
          "mainAddrCd": "Primary",
          "addressType": "Not Appliacble",
          "srcAddrLn1": "test",
          "srcCity": "test",
          "srcState": "test",
          "srcPstlCd": "5600re",
          "addressLine1": "2000 RUA FERNANDO BERNARDELLI",
          "city": "PORTO REAL",
          "state": "RJ",
          "postal_Code": "27570000",
          "srcCountryCd": "BR"
        }
      ]
    }
  }
]

推荐答案

用于表示索引 node 的更多标识符如

[&3].partyContact[&4].partyContact

应添加[&7].partyContact[&8].partyContact.,如下所示:

[
  {
    "operation": "shift",
    "spec": {
      "matchedEntities": {
        "*": {
          "busEntity": {
            "ContactView": {
              "ApplicationId": "[&3].partyContact.cntId",
              "clnsdNm": "[&3].partyContact.cntName",
              "certifiedContact": {
                "CertifiedContactDesc": "[&4].partyContact.certifiedContact"
              },
              "PtPostalAdd": {
                "item": {
                  "*": {
                    "mainAddrCd": {
                      "addrTypDesc": "[&7].partyContact.postalAddress[&2].mainAddrCd"
                    },
                    "mdmOpsAddrInd": {
                      "addrTypDesc": "[&7].partyContact.postalAddress[&2].addressType"
                    },
                    "PostalAddress": {
                      "srcAddrln1": "[&7].partyContact.postalAddress[&2].srcAddrLn1",
                      "srcAddrln2": "[&7].partyContact.postalAddress[&2].srcAddrLn2",
                      "srcAddrln3": "[&7].partyContact.postalAddress[&2].srcAddrLn3",
                      "SrcAddrln4": "[&7].partyContact.postalAddress[&2].srcAddrLn4",
                      "srcCity": "[&7].partyContact.postalAddress[&2].srcCity",
                      "srcState": "[&7].partyContact.postalAddress[&2].srcState",
                      "srcPstlCd": "[&7].partyContact.postalAddress[&2].srcPstlCd",
                      "srcSystem": "[&7].partyContact.postalAddress[&2][&2].srcSystem",
                      "srcDoNotStd": "[&7].partyContact.postalAddress[&2].srcDoNotStd",
                      "addrId": "[&7].partyContact.postalAddress[&2].addressId",
                      "addrLn1": "[&7].partyContact.postalAddress[&2].addressLine1",
                      "addrLn2": "[&7].partyContact.postalAddress[&2].addressLine2",
                      "addrLn3": "[&7].partyContact.postalAddress[&2].addressLine3",
                      "addrLn4": "[&7].partyContact.postalAddress[&2].adddressLine4",
                      "city": "[&7].partyContact.postalAddress[&2].city",
                      "county": "[&7].partyContact.postalAddress[&2].county",
                      "state": "[&7].partyContact.postalAddress[&2].state",
                      "pstlCd": "[&7].partyContact.postalAddress[&2].postal_Code",
                      "countryCd": {
                        "cntryCd": "[&8].partyContact.postalAddress[&3].srcCountryCd"
                      },
                      "vldtnStsCd": "[&7].partyContact.postalAddress[&2].validation_Status_Code",
                      "enrchdInd": "[&7].partyContact.postalAddress[&2].enrichedIndicator"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

但请注意,与当前声明的 node 不同,没有名为"PartyAlternateId"的 node ,因此部分被删除.

Json相关问答推荐

如何使用表键名称GROUP_BY

JQ如何获取特定子元素的所有父母

来自json的可分析的构建报告

如何在JSONata对象中迭代并向数组添加新字段?

(Kotlin)com.google.gson.internal.LinkedTreeMap无法转换为com.example.phonetest2.model.HallData

在linux控制台中解析json字符串的最简单方法是什么?

JOLT转换并向输出添加新数组

Jolt 不打印任何东西

如何从字符串中创建一个逗号分隔的列表,由 API 中的 JSON 对象内的编号空格分隔?

如何在 Postman 中匹配 json 响应中的内容?并可视化

序列化为json时如何忽略空列表?

将嵌套的 JSON 对象规范化为 Pandas 数据框

Angular 2/Web Api - json 解析错误语法错误意外结束输入

在 Rails 中使用 JSON 创建嵌套对象

将字符串映射到json对象的多种类型?

android - 在 adb logcat 输出中格式化 json 字符串

将 CoffeeScript 项目转换为 JavaScript(不缩小)?

ASP.NET Core API 仅返回列表的第一个结果

如何在 Java 中将 YAML 转换为 JSON?

Newtonsoft 对象 → 获取 JSON 字符串