如何使用JOLT提取JSON数组中的每个元素
使用JOLT将多数组字段展开为单条记录数组
输入JSON
{ "CNPJ_PSSA_JUDC": "00000000", "NOME_PSSA_JUDC": "EMPRESA DE CNPJ 00000000 LTDA", "DOCT_SCIO": [ "11111111111", "00000000000" ], "NOME_SCIO": [ "PESSOA DE CPF 11111111111", "PESSOA DE CPF 00000000000" ], "DCRC_CRGO": [ "Sócio", "Sócio-Administrador" ] }
目标输出
[ { "CNPJ_PSSA_JUDC": "00000000", "NOME_PSSA_JUDC": "EMPRESA DE CNPJ 00000000 LTDA", "DOCT_SCIO": "11111111111", "NOME_SCIO": "PESSOA DE CPF 11111111111", "DCRC_CRGO": "Sócio" }, { "CNPJ_PSSA_JUDC": "00000000", "NOME_PSSA_JUDC": "EMPRESA DE CNPJ 00000000 LTDA", "DOCT_SCIO": "00000000000", "NOME_SCIO": "PESSOA DE CPF 00000000000", "DCRC_CRGO": "Sócio-Administrador" } ]
JOLT转换规范
通过shift操作结合数组索引关联对应元素,同时复制非数组字段到每条记录:
[ { "operation": "shift", "spec": { "DOCT_SCIO": { "*": { "@(2,CNPJ_PSSA_JUDC)": "[&1].CNPJ_PSSA_JUDC", "@(2,NOME_PSSA_JUDC)": "[&1].NOME_PSSA_JUDC", "@": "[&1].DOCT_SCIO", "@(2,NOME_SCIO[&1])": "[&1].NOME_SCIO", "@(2,DCRC_CRGO[&1])": "[&1].DCRC_CRGO" } } } } ]
核心逻辑说明
- 遍历基准:选择
DOCT_SCIO数组作为遍历入口,*匹配数组的每个元素索引(0、1...)。 - 复制全局字段:
@(2,CNPJ_PSSA_JUDC)表示向上回溯2层(跳出当前数组元素的层级),获取根节点的全局字段值,赋值给对应索引的记录。 - 关联同索引元素:
&1代表当前遍历的索引值,用它获取NOME_SCIO、DCRC_CRGO数组中同位置的元素,确保每条记录的字段对应正确。 - 当前元素赋值:
@直接引用当前DOCT_SCIO数组的元素值,赋值给对应字段。
注意点
- 必须保证所有数组字段的长度一致,否则会出现数据不匹配或缺失。
- 如果数组长度不一致,可额外添加
default操作补充默认值,或者更换遍历基准数组。
内容的提问来源于stack exchange,提问作者Mateus Costa Luz
相关产品推荐
相关产品推荐

