【问题标题】:Jolt Transformation Nested Json to Flat JsonJolt 将嵌套的 Json 转换为平面 Json
【发布时间】:2020-01-31 22:38:38
【问题描述】:

我与这个非常接近。但是,恐怕输出不是我想要的。有人可以帮我纠正我的 Jolt Spec 以获得我正在寻找的确切转换吗?我真的已经尝试过为此绞尽脑汁,非常感谢最后一点帮助。

所以目前我看起来像这样:

{
  "Hdr": {
    "DataSupplier": "BANK19000001",
    "FeedType": "Reuse",
    "SchemaVersion": "05.00",
    "SeqNo": "1",
    "DateProduced": "2019-09-30T11:44:12Z",
    "RecordCount": 1
  },
  "Data": [
    {
      "IM_SubmitterID": "BANK19000001",
      "IM_ParticipantID": "BANK19000001",
      "IM_AsOfDateTime": "2019-09-30T11:44:12Z",
      "IM_RepCpCodeType": "LEI",
      "CP_RepCp": "549300LW9VUUMJV5HC31",
      "CO_ActionType": "Normal",
      "CP_EntResponsibleForRep": "549300LW9VUUMJV5HC31",
      "LN_EventDate": "2019-09-30",
      "Clltrl": [
        {
          "CO_TypeOfCollComponent": "SECU",
          "CO_IdOfASecUsedAsColl": "FR0000131104",
          "RU_ValueOfReusedColl": "1000000",
          "RU_EstimatedReuseOfColl": "500000",
          "RU_ReusedCollCcy": "EUR"
        },
        {
          "CO_TypeOfCollComponent": "SECU",
          "CO_IdOfASecUsedAsColl": "FR0000131105",
          "RU_ValueOfReusedColl": "2000000",
          "RU_EstimatedReuseOfColl": "400000",
          "RU_ReusedCollCcy": "EUR"
        },
        {
          "CO_TypeOfCollComponent": "SECU",
          "CO_IdOfASecUsedAsColl": "FR0000131106",
          "RU_ValueOfReusedColl": "1500000",
          "RU_EstimatedReuseOfColl": "1000000",
          "RU_ReusedCollCcy": "EUR"
        },
        {
          "CO_TypeOfCollComponent": "CASH",
          "RU_ReinvestmentRate": "1.003",
          "RU_TypeOfReinvestedCashInvstmnt": "MMFT",
          "RU_ReinvestedCashAmt": "150000000",
          "RU_ReinvestedCashCcy": "USD"
        },
        {
          "CO_TypeOfCollComponent": "CASH",
          "RU_ReinvestmentRate": "0.05",
          "RU_TypeOfReinvestedCashInvstmnt": "REPM",
          "RU_ReinvestedCashAmt": "200000000",
          "RU_ReinvestedCashCcy": "EUR"
        }
      ],
      "FndngSrce": [
        {
          "RU_FundingSources": "OTHR",
          "RU_MarketValueOfTheFundingSources": "12000000",
          "RU_FundingSourcesCcy": "USD"
        },
        {
          "RU_FundingSources": "BSHS",
          "RU_MarketValueOfTheFundingSources": "150000000",
          "RU_FundingSourcesCcy": "EUR"
        }
      ],
      "UsrDfnd": {
        "IM_UserDefined1": "Test Data"
      }
    }
  ]
}

这是我目前编写的当前 Jolt Specs(已编辑):

    [
  {
    "operation": "shift",
    "spec": {
      "Hdr": {
        "*": "header.&"
      },
      "Data": {
        "*": {
          "*": "data.&",
          "Clltrl": {
            "*": {
              "*": "data.&"
            },
            "UsrDfnd": {
              "*": "data.&"
            }
          }
        }
      }
    }
  }
]

以及变换后的输出:

{
  "header" : {
    "DataSupplier" : "BANK19000001",
    "FeedType" : "Reuse",
    "SchemaVersion" : "05.00",
    "SeqNo" : "1",
    "DateProduced" : "2019-09-30T11:44:12Z",
    "RecordCount" : 1
  },
  "body" : {
    "CO_TypeOfCollComponent" : [ "SECU", "SECU", "SECU", "CASH", "CASH" ],
    "CO_IdOfASecUsedAsColl" : [ "FR0000131104", "FR0000131105", "FR0000131106" ],
    "RU_ValueOfReusedColl" : [ "1000000", "2000000", "1500000" ],
    "RU_EstimatedReuseOfColl" : [ "500000", "400000", "1000000" ],
    "RU_ReusedCollCcy" : [ "EUR", "EUR", "EUR" ],
    "RU_ReinvestmentRate" : [ "1.003", "0.05" ],
    "RU_TypeOfReinvestedCashInvstmnt" : [ "MMFT", "REPM" ],
    "RU_ReinvestedCashAmt" : [ "150000000", "200000000" ],
    "RU_ReinvestedCashCcy" : [ "USD", "EUR" ],
    "RU_FundingSources" : [ "OTHR", "BSHS" ],
    "RU_MarketValueOfTheFundingSources" : [ "12000000", "150000000" ],
    "RU_FundingSourcesCcy" : [ "USD", "EUR" ],
    "Test Data" : null
  }
}

这确实接近于预期的结果。但是,它缺少输入的“数据”部分中的一些数据。我确实尝试了所有可能的组合,并尝试在线搜索答案,但无济于事。

所需的 Json 输出:

{
  "header" : {
    "DataSupplier" : "BANK19000001",
    "FeedType" : "Reuse",
    "SchemaVersion" : "05.00",
    "SeqNo" : "1",
    "DateProduced" : "2019-09-30T11:44:12Z",
    "RecordCount" : 1
  },
  "body" : {
    "IM_SubmitterID" : "BANK19000001",
    "IM_ParticipantID" : "BANK19000001",
    "IM_AsOfDateTime" : "2019-09-30T11:44:12Z",
    "IM_RepCpCodeType" : "LEI",
    "CP_RepCp" : "549300LW9VUUMJV5HC31",
    "CO_ActionType" : "Normal",
    "CP_EntResponsibleForRep" : "549300LW9VUUMJV5HC31",
    "LN_EventDate" : "2019-09-30",
    "CO_TypeOfCollComponent" : [ "SECU", "SECU", "SECU", "CASH", "CASH" ],
    "CO_IdOfASecUsedAsColl" : [ "FR0000131104", "FR0000131105", "FR0000131106" ],
    "RU_ValueOfReusedColl" : [ "1000000", "2000000", "1500000" ],
    "RU_EstimatedReuseOfColl" : [ "500000", "400000", "1000000" ],
    "RU_ReusedCollCcy" : [ "EUR", "EUR", "EUR" ],
    "RU_ReinvestmentRate" : [ "1.003", "0.05" ],
    "RU_TypeOfReinvestedCashInvstmnt" : [ "MMFT", "REPM" ],
    "RU_ReinvestedCashAmt" : [ "150000000", "200000000" ],
    "RU_ReinvestedCashCcy" : [ "USD", "EUR" ],
    "RU_FundingSources" : [ "OTHR", "BSHS" ],
    "RU_MarketValueOfTheFundingSources" : [ "12000000", "150000000" ],
    "RU_FundingSourcesCcy" : [ "USD", "EUR" ],
    "IM_UserDefined1" : "Test Data"
  }
}

谁能帮我修改我的 Jolt Specs 以达到预期的效果。

非常感谢任何帮助。

【问题讨论】:

    标签: json apache-nifi jolt


    【解决方案1】:

    由于您没有提供输入数据的软拷贝,我无法使用您自己的数据进行测试。但是,我编造了以下逻辑等价物。假设我们有输入:

    {
      "hdr": {
        "a": "a"
      },
      "dta": {
        "b": "b",
        "c": [
          {
            "d": "d1",
            "e": "e1"
          },
          {
            "d": "d2",
            "e": "e2"
          }
        ]
      }
    }
    

    我们想要的输出是:

    {
      "header" : {
        "a" : "a"
      },
      "data" : {
        "b" : "b",
        "d" : [ "d1", "d2" ],
        "e" : [ "e1", "e2" ]
      }
    }
    

    那么以下可以用作 Jolt Spec:

    [
      {
        "operation": "shift",
        "spec": {
          "hdr": {
            "*": "header.&"
          },
          "dta": {
            "*": "data.&",
            "c": {
              "*": {
                "*": "data.&"
              }
            }
          }
        }
      }
    ]
    

    【讨论】:

    • 谢谢你的例子。使用它作为参考点,我能够更新我的规格。但是,我无法得到想要的结果。我相信错误可能出在这部分 "Data": { "": { "": "data.&", "Clltrl": { "": { "": "data.&", "FndngSrce": { "": { "": "data.&", "UsrDfnd": { "*": "data.&" 同样,它几乎就在那里,但我无法将“FndngSrce”和“UsrDfnd”与其他数据处于同一级别。
    • 如果您可以更新问题或发布指向您目前为止最好的 JOLT 规范的链接,那就太好了。今晚我坐下来试一试这个谜题,但上面的评论意味着我必须做很多工作才能使规范正确。发帖时,请尽量让响应者尽可能轻松地协助测试等。
    • 这里是一个似乎有效的 JSON JOLT 规范示例:pastebin.com/aJ0ev1vj
    猜你喜欢
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多