求助编写Jolt转换规则:将嵌套JSON展开为扁平对象
Jolt转换规则:将嵌套JSON扁平化为指定结构
需要将嵌套的JSON输入转换为扁平结构的输出,以下是输入、期望输出以及对应的Jolt转换规则:
输入JSON
[ { "organizationName": "TOTOLAND", "organizationUid": "123456789", "usageByLicenseAndProduct": [ { "productType": "VSPC", "licenseEdition": "Enterprise Plus", "workloadUsage": [ { "workloadType": "VAC_Workstation_Agent" }, { "workloadType": "VAC_Server_Agent" } ] } ] }, { "organizationName": "TOTOLAND2", "organizationUid": "456789", "usageByLicenseAndProduct": [ { "productType": "VSPC", "licenseEdition": "Enterprise Plus", "workloadUsage": [ { "workloadType": "VAC_Workstation_Agent" } ] }, { "productType": "BackupAndReplication", "licenseEdition": "Enterprise Plus", "workloadUsage": [ { "workloadType": "VAC_Workstation_Agent" } ] } ] } ]
期望输出JSON
[ { "organizationName": "TOTOLAND", "organizationUid": "123456789", "productType": "VSPC", "licenseEdition": "Enterprise Plus", "workloadType": "VAC_Workstation_Agent" }, { "organizationName": "TOTOLAND", "organizationUid": "123456789", "productType": "VSPC", "licenseEdition": "Enterprise Plus", "workloadType": "VAC_Server_Agent" }, { "organizationName": "TOTOLAND2", "organizationUid": "456789", "productType": "VSPC", "licenseEdition": "Enterprise Plus", "workloadType": "VAC_Workstation_Agent" } ]
Jolt转换规则
[ { "operation": "shift", "spec": { "*": { "usageByLicenseAndProduct": { "*": { "workloadUsage": { "*": { "@(3,organizationName)": "[&1].organizationName", "@(3,organizationUid)": "[&1].organizationUid", "@(2,productType)": "[&1].productType", "@(2,licenseEdition)": "[&1].licenseEdition", "workloadType": "[&1].workloadType" } } } } } } }, { "operation": "remove", "spec": { "*": { "": "" } } } ]
规则说明
- shift操作:这是核心转换步骤,用来拆解嵌套结构:
- 每层的
*用来遍历对应数组里的所有元素,比如顶层的组织、每个组织下的许可证条目、每个条目下的工作负载 @(n,key)表示从当前层级向上数n层,提取对应key的数值,比如@(3,organizationName)就是从当前工作负载条目往上找3层,拿到所属的组织名称[&1]会根据当前工作负载的数组索引,生成输出数组里的对应位置,保证每个工作负载都能变成独立的扁平对象
- 每层的
- remove操作:清理转换过程中可能产生的空对象,让输出结构更整洁
内容的提问来源于stack exchange,提问作者Gatien FERRAND
相关产品推荐
相关产品推荐

