O Stream JSON File Reader lê um arquivo JSON local, aplica uma expressão JSON Path, devolve em um estrutura JSON conforme a expressão definida e dispara subpipelines para processar cada mensagem. O componente deve ser utilizado para arquivos grandes.

Dê uma olhada nos parâmetros de configuração do componente:

  • File Name: nome do arquivo JSON local.

  • JSON Path: expressão JSON Path que irá determinar como será feita a leitura em stream desse arquivo JSON.

  • Element Identifier: atributo que será enviado em caso de erros.

  • Parallel Execution Of Each Iteration: ocorre em paralelo com a execução do loop.

  • Fail On Error: a habilitação desse parâmetro suspende a execução do pipeline apenas quando há uma ocorrência grave na estrutura da iteração, impedindo a sua conclusão por completo. A ativação do parâmetro "Fail On Error" não tem ligação com erros ocorridos nos componentes utilizados para a construção dos subpipelines (onProcess e onException).

Fluxo de mensagens

Entrada

Não se espera nenhuma mensagem de entrada específica e sim apenas a posse de um arquivo JSON no diretório local do pipeline e o preenchimento dos campos “File Name” e “JSON Path” para o processamento do arquivo.

Saída

{
"total": 0,
"success": 0,
"failed": 0
}

  • total: número total de linhas processadas

  • success: número total de linhas processadas com sucesso

  • failed: número total de linhas cujo processamento falhou

IMPORTANTE: para saber se uma linha foi processada corretamente, deve haver o retorno { "success": true } para cada linha processada.

O componente joga uma exceção se o “File Name” não existir ou não puder ser lido.

A manipulação de arquivos dentro de um pipeline ocorre de forma protegida. Todos os arquivos podem ser acessados apenas por um diretório temporário, no qual cada pipeline key dá acesso ao seu próprio conjunto de arquivos.

O Stream JSON File Reader realiza processamento em lote. Para entender melhor o conceito, clique aqui.

Stream JSON File Reader em Ação

Realizando o stream do arquivo sem filtros no JSON Path

Entrada

file.json

{
"products" : [
{
"product": "Chair",
"price": 20.75,
"tags": ["NEW", "FURNITURE"]
},
{
"product": "TV",
"price": 399.99,
"tags": ["NEW", "FURNITURE"]
},
{
"product": "Couch",
"price": 100,
"tags": ["NEW", "FURNITURE"]
},
{
"product": "Table",
"price": 78.99,
"tags": ["NEW", "FURNITURE"]
}
]
}

File Name: file.json

JSON Path: $.products[*]

Saída

{
"total": 4,
"success": 4,
"failed": 0
}

Cada objeto dentro do array "products" do arquivo informado será processado de forma independente:

  • Primeiro subfluxo

{"data": {
"product": "Chair",
"price": 20.75,
"tags": ["NEW", "FURNITURE"]
}}

  • Segundo subfluxo

{"data": {
"product": "TV",
"price": 399.99,
"tags": ["NEW", "FURNITURE"]
}}

  • Terceiro subfluxo

{"data": {
"product": "Couch",
"price": 100,
"tags": ["NEW", "FURNITURE"]
}}

  • Quarto subfluxo

{"data": {
"product": "Table",
"price": 78.99,
"tags": ["NEW", "FURNITURE"]
}}

Realizando o stream do arquivo com filtros no JSON Path

Entrada

file.json

{
"products" : [
{
"product": "Chair",
"price": 20.75,
"tags": ["NEW", "FURNITURE"]
},
{
"product": "TV",
"price": 399.99,
"tags": ["NEW", "FURNITURE"]
},
{
"product": "Couch",
"price": 100,
"tags": ["NEW", "FURNITURE"]
},
{
"product": "Table",
"price": 78.99,
"tags": ["NEW", "FURNITURE"]
}
]
}

File Name: file.json

JSON Path: $.products[?(@.price < 80)]

Saída

{
"total": 2,
"success": 2,
"failed": 0
}

Cada objeto dentro do array "products" do arquivo informado será processado de forma independente:

  • Primeiro subfluxo

{"data": {
"product": "Chair",
"price": 20.75,
"tags": ["NEW", "FURNITURE"]
} }

  • Segundo subfluxo

{"data": {
"product": "Table",
"price": 78.99,
"tags": ["NEW", "FURNITURE"]
}}

Realizando o stream do arquivo com filtros no JSON Path e retornando somente o valor do atributo 'product'

Entrada

file.json

{
"products" : [
{
"product": "Chair",
"price": 20.75,
"tags": ["NEW", "FURNITURE"]
},
{
"product": "TV",
"price": 399.99,
"tags": ["NEW", "FURNITURE"]
},
{
"product": "Couch",
"price": 100,
"tags": ["NEW", "FURNITURE"]
},
{
"product": "Table",
"price": 78.99,
"tags": ["NEW", "FURNITURE"]
}
]
}

File Name: file.json

JSON Path: $.products[?(@.price < 80)].product

Saída

{
"total": 2,
"success": 2,
"failed": 0
}

Cada objeto dentro do array "products" do arquivo informado será processado de forma independente:

  • Primeiro subfluxo

{"data": "Chair" }

  • Segundo subfluxo

{"data": "Table" }

Encontrou sua resposta?