You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JOLT转换错误排查:保留顶层字段生成目标数组结构

JOLT转换问题:将顶层字段合并到数组元素中

输入JSON

{
  "found": true,
  "consultado": "00000000",
  "nome": "EMPRESA DE CNPJ 00000000 LTDA",
  "participacaoEmpresa": [
    {
      "cnpj": "44444444",
      "nome": "EMPRESA DE CNPJ 44444444 LTDA",
      "descricaoCargo": "Sócio"
    },
    {
      "cnpj": "123",
      "nome": "EMPRESA DE CNPJ 123 LTDA",
      "descricaoCargo": "Sócio123"
    }
  ]
}

原JOLT规则

[
  {
    "operation": "shift",
    "spec": {
      "consultado": "DOCT_SCIO",
      "nome": "NOME_SCIO",
      "participacaoEmpresa": {
        "*": {
          "cnpj": "CNPJ_PSSA_JUDC",
          "nome": "NOME_PSSA_JUDC",
          "descricaoCargo": "DCRC_CRGO"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*_PSSA*|DCRC_CRGO": {
        "*": {
          "@": "[&1].&2"
        }
      }
    }
  }
]

当前错误输出

[
  {
    "DCRC_CRGO": "Sócio",
    "CNPJ_PSSA_JUDC": "44444444",
    "NOME_PSSA_JUDC": "EMPRESA DE CNPJ 44444444 LTDA"
  },
  {
    "DCRC_CRGO": "Sócio123",
    "CNPJ_PSSA_JUDC": "123",
    "NOME_PSSA_JUDC": "EMPRESA DE CNPJ 123 LTDA"
  }
]

期望输出

[
  {
    "DOCT_SCIO": "00000000",
    "NOME_SCIO": "EMPRESA DE CNPJ 00000000 LTDA",
    "DCRC_CRGO": "Sócio",
    "CNPJ_PSSA_JUDC": "44444444",
    "NOME_PSSA_JUDC": "EMPRESA DE CNPJ 44444444 LTDA"
  },
  {
    "DOCT_SCIO": "00000000",
    "NOME_SCIO": "EMPRESA DE CNPJ 00000000 LTDA",
    "DCRC_CRGO": "Sócio123",
    "CNPJ_PSSA_JUDC": "123",
    "NOME_PSSA_JUDC": "EMPRESA DE CNPJ 123 LTDA"
  }
]

错误原因

原规则的第二个shift操作仅匹配*_PSSA*和DCRC_CRGO字段,完全忽略了顶层的DOCT_SCIO和NOME_SCIO,导致这两个字段被直接丢弃,没有被合并到最终的数组元素中。

修改后的JOLT规则

[
  {
    "operation": "shift",
    "spec": {
      "consultado": "DOCT_SCIO",
      "nome": "NOME_SCIO",
      "participacaoEmpresa": {
        "*": {
          "cnpj": "CNPJ_PSSA_JUDC",
          "nome": "NOME_PSSA_JUDC",
          "descricaoCargo": "DCRC_CRGO"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "DOCT_SCIO": {
        "@": "[*].DOCT_SCIO"
      },
      "NOME_SCIO": {
        "@": "[*].NOME_SCIO"
      },
      "*_PSSA*|DCRC_CRGO": {
        "*": {
          "@": "[&1].&2"
        }
      }
    }
  }
]

分步解析

  1. 第一个Shift操作:

    • 映射顶层字段:将consultado转为DOCT_SCIO,nome转为NOME_SCIO,这两个字段为单值。
    • 处理数组:遍历participacaoEmpresa的每个元素(*匹配数组索引),将每个元素的子字段映射为CNPJ_PSSA_JUDC、NOME_PSSA_JUDC、DCRC_CRGO,由于数组有2个元素,这三个字段会生成长度为2的数组。
      中间输出如下:
    {
      "DOCT_SCIO": "00000000",
      "NOME_SCIO": "EMPRESA DE CNPJ 00000000 LTDA",
      "CNPJ_PSSA_JUDC": ["44444444", "123"],
      "NOME_PSSA_JUDC": ["EMPRESA DE CNPJ 44444444 LTDA", "EMPRESA DE CNPJ 123 LTDA"],
      "DCRC_CRGO": ["Sócio", "Sócio123"]
    }
    
  2. 第二个Shift操作:

    • 复制顶层字段到数组元素:使用[*]通配符,将DOCT_SCIO和NOME_SCIO的单值复制到数组的每个索引位置([0]和[1])对应的对象中,保持字段名不变。
    • 映射数组字段到对象:遍历*_PSSA*和DCRC_CRGO的数组元素(*匹配索引),通过[&1].&2将值放到对应索引的对象里,其中&1代表当前数组的索引,&2代表原字段名。
      最终输出即为期望的结构,每个数组元素都包含所有字段。

内容的提问来源于stack exchange,提问作者Mateus Costa Luz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:20:54