Stream JSON File Reader

Descubra mais sobre o componente Stream JSON File Reader e saiba como utilizá-lo na Digibee Integration Platform.

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.

Parâmetros

Dê uma olhada nos parâmetros de configuração do componente. Parâmetros suportados por expressões Double Braces estão marcados com (DB).

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.

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, leia o artigo sobre Processamento em lote.

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" }

Atualizado