如何使用 Pentaho Spoon 6 JSON 输入读取多嵌套 JSON 文件

How to Read a multi nested JSON file with Pentaho Spoon 6 JSON Input

提问人:Levi Lippincott 提问时间:10/25/2023 更新时间:10/27/2023 访问量:26

问:

我有一个 JSON 文件,其中包含多个子级别,我需要使用 PDI 进行解析。让我陷入循环的棘手部分是嵌套数组中的一对多关系。

下面是我的 JSON 示例:

{
    "@gdata.count": "139111",
    "value": [
        {
            "InvStatus": {
                "Description": "Active"
            },
            "DeviceAddresses": [],
            "People": [],
            "Id": "11",
            "InvHostName": "NYCRMR-TWX9000",
            "InvDomain": "blah.masked.com",
            "InvSerialNumber": "86753091",
            "InvDevType": "Workstation",
            "InvRegion": "NA",
            "InvLocation": "114AP2",
            "InvNetwork": "WMG",
            "InvBrand": "RMR",
            "InvProtectionStatus": null,
            "InvConversionStatus": null,
            "InvDeviceDob": "2023-10-23"
        }, {
            "InvStatus": {
                "Description": "Disconnected"
            },
            "DeviceAddresses": [],
            "People": [],
            "Id": "37",
            "InvHostName": "NYCRMR-TWX9002",
            "InvDomain": "blah.masked.com",
            "InvSerialNumber": "86753092",
            "InvDevType": "Workstation",
            "InvRegion": "NA",
            "InvLocation": "114AP4",
            "InvNetwork": "WMG",
            "InvBrand": "RMR",
            "InvProtectionStatus": null,
            "InvConversionStatus": null,
            "InvDeviceDob": "2023-10-23"
        }, {
            "InvStatus": {
                "Description": "Disconnected"
            },
            "DeviceAddresses": [],
            "People": [{
                    "Role": {
                        "Description": "Asset Manager"
                    },
                    "Id": "65571",
                    "Email": "[email protected]"
                }, {
                    "Role": {
                        "Description": "Primary Technical Contact"
                    },
                    "Id": "65477",
                    "Email": "[email protected]"
                }, {
                    "Role": {
                        "Description": "Asset User"
                    },
                    "Id": "65478",
                    "Email": "[email protected]"
                }, {
                    "Role": {
                        "Description": "Secondary Technical Contact"
                    },
                    "Id": "65479",
                    "Email": "[email protected]"
                }, {
                    "Role": {
                        "Description": "Secondary Technical Contact"
                    },
                    "Id": "65475",
                    "Email": "[email protected]"
                }
            ],
            "Id": "44",
            "InvHostName": "-0cc05ac548317d30c",
            "InvDomain": "WORKGROUP",
            "InvSerialNumber": "n/a",
            "InvDevType": "Server",
            "InvRegion": "NA",
            "InvLocation": "FREM45",
            "InvNetwork": "WMB",
            "InvBrand": "OKS",
            "InvProtectionStatus": null,
            "InvConversionStatus": null,
            "InvDeviceDob": "2021-05-03"
        }
    ]
}

我尝试在一个步骤中完成所有操作,但这只返回了嵌套结果中的第一项。

接下来,我尝试分多个步骤进行操作,其中第一步检索第一级字段,第二步检索第二级字段,依此类推。

我的第一步是检索这些字段: PDI 屏幕截图 1

我的第二步是检索这些字段: PDI 屏幕截图 2

最终发生的是,从第 2 步开始的“人员”字段复制到第 1 步中检索到的所有行,而不仅仅是导致与第 1 步中的第 3 条记录重复。

上面的 JSON 只是一个很小的示例,我将要拉回的实际记录超过 100k,我只想将人员记录与设备相关联。

数组 json pentaho-data-integration PDI

评论


答:

2赞 Levi Lippincott 10/26/2023 #1

我能够弄清楚这一点,并希望让其他寻找解决方案的人知道我是如何解决的。

第二种方法是正确的路径,我将在第一步中解析出第一级字段,然后在第二步中解析出第二级字段。

我需要做的额外的转折是将辅助数组的第一级数组提取到一个附加字段中,在我的示例中,我将其称为 PeopleData。这仅将该小 JSON 数组放入其自己的字段中,该字段直接与该行的数据相关联,而不是其他每一行。

看截图:

PDI Screenshot 1

然后,在我的下一步中,我只是引用了该新字段 JSON 并使用 [*] 解析了该数据,并且由于这对于该行是唯一的,因此它保持了与顶层的关系不变。

看截图:

PDI Screenshot 2

我希望这对某人有所帮助。