Search code examples
jsontextapache-nifijolt

NIFI - I need the information of a Array, but only the first information


Good Evening..

I have a JSON with this values:

[
  {
    "oid_notas": 12750,
    "unidade": "BRYE",
    "nota_fiscal": "182477",
    "serie_nota_fiscal": null,
    "nota_fiscal_interno": null,
    "data_nota": null,
    "embarque": "64167625",
    "cep_origem": "37640000",
    "cep_destino": "36092005",
    "cnpj_transportadora": "34334442000196",
    "cnpj_destinatario": "17745613000150",
    "cnpj_unidade": "13143802000879",
    "placa": "EDP3H17",
    "data_inicio": "2023-12-18",
    "hora_inicio": "16:39:42",
    "data_fim": "2023-12-20",
    "hora_fim": "04:26:20",
    "chave_acesso": "31231213143802000879550010001824771354201333",
    "nome_motorista": "JORGE LUIS MASSEI",
    "cpf_motorista": "18407854620"
  },
  {
    "oid_notas": 12751,
    "unidade": "BRYE",
    "nota_fiscal": "182472",
    "serie_nota_fiscal": null,
    "nota_fiscal_interno": null,
    "data_nota": null,
    "embarque": "64167625",
    "cep_origem": "37640000",
    "cep_destino": "36092005",
    "cnpj_transportadora": "34334442000196",
    "cnpj_destinatario": "17745613000150",
    "cnpj_unidade": "13143802000879",
    "placa": "EDP3H17",
    "data_inicio": "2023-12-18",
    "hora_inicio": "16:39:42",
    "data_fim": "2023-12-20",
    "hora_fim": "04:26:20",
    "chave_acesso": "31231213143802000879550010001824721154911322",
    "nome_motorista": "JORGE LUIS MASSEI",
    "cpf_motorista": "18407854620"
  }
]

My jolt transform actually:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "cnpj_unidade": ["cnpjUnidade", "documentos[#2].cnpjEmissor", "remetente.cnpj"],
        "embarque": "numeroEmbarque",
        "cep_origem": "cepOrigem",
        "cep_destino": "cepDestino",
        "placa": "placa",
        "data_inicio": "data_inicio",
        "hora_inicio": "hora_inicio",
        "data_fim": "data_fim",
        "hora_fim": "hora_fim",
        "cnpj_destinatario": "destinatario.cnpj",
        "cnpj_transportadora": "transportadora.cnpj",
        "chave_acesso": "documentos[#2].chaveAcesso",
        "cpf_motorista": "motoristas[#2].documento",
        "nome_motorista": "motoristas[#2].nome"
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "cnpjUnidade": "ONE",
      "numeroEmbarque": "ONE",
      "cepOrigem": "ONE",
      "cepDestino": "ONE",
      "data_inicio": "ONE",
      "hora_inicio": "ONE",
      "data_fim": "ONE",
      "hora_fim": "ONE",
      "placa": "ONE",
      "destinatario": {
        "cnpj": "ONE"
      },
      "remetente": {
        "cnpj": "ONE"
      },
      "transportadora": {
        "cnpj": "ONE"
      }
   }
 },
 {
    "operation": "default",
    "spec": {
      "calcularcarga": false,
      "documentos[]": {
        "*": {
          "tipoDocumento": 0
        }
      },
      "motoristas[]": {
        "*": {
          "tipoDocumento": 1
        }
      }
    }
 },
 {
    "operation": "modify-overwrite-beta",
    "spec": {
      "dataEmbarque": "=concat(@(1,data_inicio),' ',@(1,hora_inicio))",
      "dataEmissao": "=concat(@(1,data_inicio),' ',@(1,hora_inicio))",
      "dataPrevisaoFimEmbarque": "=concat(@(1,data_fim),' ',@(1,hora_fim))"
    }
 },
 {
    "operation": "remove",
    "spec": {
      "data_inicio": "",
      "hora_inicio": "",
      "data_fim": "",
      "hora_fim": ""
    }
 }
]

The output:

{
  "cnpjUnidade": "13143802000879",
  "documentos": [
    {
      "cnpjEmissor": "13143802000879",
      "chaveAcesso": "31231213143802000879550010001824771354201333",
      "tipoDocumento": 0
    },
    {
      "cnpjEmissor": "13143802000879",
      "chaveAcesso": "31231213143802000879550010001824721154911322",
      "tipoDocumento": 0
    }
  ],
  "remetente": {
    "cnpj": "13143802000879"
  },
  "numeroEmbarque": "64167625",
  "cepOrigem": "37640000",
  "cepDestino": "36092005",
  "placa": "EDP3H17",
  "destinatario": {
    "cnpj": "17745613000150"
  },
  "transportadora": {
    "cnpj": "34334442000196"
  },
  "motoristas": [
    {
      "documento": "18407854620",
      "nome": "JORGE LUIS MASSEI",
      "tipoDocumento": 1
    },
    {
      "documento": "18407854620",
      "nome": "JORGE LUIS MASSEI",
      "tipoDocumento": 1
    }
  ],
  "calcularcarga": false,
  "dataEmbarque": "2023-12-18 16:39:42",
  "dataEmissao": "2023-12-18 16:39:42",
  "dataPrevisaoFimEmbarque": "2023-12-20 04:26:20"
}

The information at the column:

"motoristas" : [ {
    "documento" : "18407854620",
    "nome" : "JORGE LUIS MASSEI",

I need this "documento" and "nome" only one time in this array motoristas.

What I need to send only one time in this jolt?

Thanks.


Solution

  • You might suffix motoristas[#2] with [0] as motoristas[#2][0] in shift spec in order to keep the square brackets after adding "motoristas": "ONE" to the cardinality spec.

    So the first two specs will be

      {
        "operation": "shift",
        "spec": {
          "*": {
            "cnpj_unidade": ["cnpjUnidade", "documentos[#2].cnpjEmissor", "remetente.cnpj"],
            "embarque": "numeroEmbarque",
            "cep_origem": "cepOrigem",
            "cep_destino": "cepDestino",
            "placa|*_inicio|*_fim": "&",
            "cnpj_destinatario": "destinatario.cnpj",
            "cnpj_transportadora": "transportadora.cnpj",
            "chave_acesso": "documentos[#2].chaveAcesso",
            "cpf_motorista": "motoristas[#2][0].documento",
            "nome_motorista": "motoristas[#2][0].nome"
          }
        }
      },
      {
        "operation": "cardinality",
        "spec": {
          "motoristas": "ONE",
          "cnpjUnidade": "ONE",
          "numeroEmbarque": "ONE",
          "cepOrigem": "ONE",
          "cepDestino": "ONE",
          "data_inicio": "ONE",
          "hora_inicio": "ONE",
          "data_fim": "ONE",
          "hora_fim": "ONE",
          "placa": "ONE",
          "destinatario": {
            "cnpj": "ONE"
          },
          "remetente": {
            "cnpj": "ONE"
          },
          "transportadora": {
            "cnpj": "ONE"
          }
        }
      }
    

    Alternatively, you might shorten the cardinality spec by adding "documentos": "MANY" while representing the non-object pairs by "*": "ONE" such as

      {
        "operation": "cardinality",
        "spec": {
          "*": "ONE",
          "documentos": "MANY",
          "destinatario": {
            "cnpj": "ONE"
          },
          "remetente": {
            "cnpj": "ONE"
          },
          "transportadora": {
            "cnpj": "ONE"
          }
        }
      }