JOLT:使用id键合并JSON数组中的特定数据,不使用“recursivelySquashNulls”保留其他数组

ee7vknir  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(149)

我一直在与这个问题斗争了几个星期,现在,一直得到吨的帮助,从每个人在这里,但我来另一个塞子在我目前的追求,以解决这个难题。
我以前有这个问题,合并数据到另一个,以避免重复,使JSON的更清晰的版本,但在我目前的平台版本,我不能使用recursivelySquashNulls和JOLT没有失去它的格式。我的输入

{
  "clubhouse": [
    {
      "id": "01",
      "statusId": "ok",
      "stateid": "2",
      "nationalities": [
        {
          "nationalityid": "1"
        },
        {
          "nationalityid": "2"
        },
        {
          "nationalityid": "3"
        }
      ],
      "TypeId": "3"
    },
    {
      "id": "01",
      "investors": [
        {
          "investor": {
            "id": "1234",
            "gender": "01"
          },
          "inamount": "1500000",
          "ratio": "12"
        }
      ]
    },
    {
      "id": "01",
      "investors": [
        {
          "investor": {
            "id": "4321",
            "gender": "02"
          },
          "inamount": "1700000",
          "ratio": "12"
        }
      ]
    },
    {
      "id": "02",
      "statusId": "ok",
      "stateid": "2",
      "nationalities": [
        {
          "nationalityid": "3"
        },
        {
          "nationalityid": "4"
        },
        {
          "nationalityid": "5"
        }
      ],
      "TypeId": "3"
    },
    {
      "id": "02",
      "investors": [
        {
          "investor": {
            "id": "1333",
            "gender": "01"
          },
          "inamount": "1500000",
          "ratio": "12"
        }
      ]
    },
    {
      "id": "03",
      "statusId": "ok",
      "stateid": "5",
      "nationalities": [
        {
          "nationalityid": "3"
        },
        {
          "nationalityid": "4"
        },
        {
          "nationalityid": "5"
        }
      ],
      "TypeId": "3"
    },
    {
      "id": "03",
      "investors": [
        {
          "investor": {
            "id": "",
            "gender": ""
          },
          "inamount": "",
          "ratio": ""
        }
      ]
    },
    {
      "id": "02",
      "statusId": "ok",
      "stateid": "2",
      "nationalities": [
        {
          "nationalityid": "3"
        },
        {
          "nationalityid": "4"
        },
        {
          "nationalityid": "5"
        }
      ],
      "TypeId": "3"
    },
    {
      "id": "02",
      "investors": [
        {
          "investor": {
            "id": "1334",
            "gender": "02"
          },
          "inamount": "1900000",
          "ratio": "12"
        }
      ]
    }
  ]
}

我现在拥有的JOLT(没有recursivelySquashNull)

[
  {
    // group by "id" values to create separate objects 
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "@(1,id).&",
          "nationalities": {
            "*": {
              "@": "@(3,id).&2[&3][]"
            }
          },
          "investors": {
            "*": {
              "*": {
                "@": "@(4,id).&3[&4].&"
              }
            }
          }
        }
      }
    }
  },
  {
    // pick only the first components from the repeated values populated within the arrays 
    "operation": "cardinality",
    "spec": {
      "*": {
        "*": "ONE",
        "investors": "MANY",
        // Have to add nationalities here, if not it only shows null in the second array since the real values are hidden behind
        "nationalities": "MANY"
      }
    }
  },
  {
    // get rid of object labels
    "operation": "shift",
    "spec": {
      "*": ""
    }
  }
]

我的欲望输出

{
  "clubhouse": [
    {
      "id": "01",
      "statusId": "ok",
      "stateid": "2",
            "nationalities": [
        {
          "nationalityid": "1"
        },
        {
          "nationalityid": "2"
        },
        {
          "nationalityid": "3"
        }
      ],
      "TypeId": "3",
      "investors": [
        {
          "investor": {
            "id": "1234",
            "gender": "01"
          },
          "inamount": "1500000",
          "ratio": "12"
        },
        {
          "investor": {
            "id": "4321",
            "gender": "02"
          },
          "inamount": "1700000",
          "ratio": "12"
        }
      ]
    },
    {
      "id": "02",
      "statusId": "ok",
      "stateid": "2",
      "nationalities": [
        {
          "nationalityid": "3"
        },
        {
          "nationalityid": "4"
        },
        {
          "nationalityid": "5"
        }
      ],
      "TypeId": "3",
      "investors": [
        {
          "investor": {
            "id": "1333",
            "gender": "01"
          },
          "inamount": "1500000",
          "ratio": "12"
        },
        {
          "investor": {
            "id": "1334",
            "gender": "02"
          },
          "inamount": "1900000",
          "ratio": "12"
        }
      ]
    },
    {
      "id": "03",
      "statusId": "ok",
      "stateid": "5",
      "nationalities": [
        {
          "nationalityid": "3"
        },
        {
          "nationalityid": "4"
        },
        {
          "nationalityid": "5"
        }
      ],
      "TypeId": "3",
      "investors": [
        {
          "investor": {
            "id": "",
            "gender": ""
          },
          "inamount": "",
          "ratio": ""
        }
      ]
    }
  ]
}
l3zydbqr

l3zydbqr1#

为了消除数组中出现的null成分,不需要对&符号使用 Package 方括号。为此,对"nationalities"数组应用shift转换两次,并更改基数规格如下

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "@(1,id).&",
          "nationalities": {
            "*": {
              "*": {
                "@": "@(4,id).&3[&2].&"
              }
            }
          },
          "investors": { // first time
            "*": {
              "*": "@(3,id).&2.&3.&"
            }
          }
        }
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "*": "ONE",
        "nationalities": {
          "*": {
            "*": "ONE"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "&1.&",
        "inv*": { // second time
          "*": {
            "@": "&3.&2"
          }
        }
      }
    }
  },
  {
    // get rid of object labels of "id" values
    "operation": "shift",
    "spec": {
      "*": ""
    }
  }
]

相关问题