---
title: Mapeamento de dados em formato JSON Lines
date: 2020-02-24
categories:
  - data-integration
  - database-mapping
  - json
tags:
  - data-mapping
  - database-mapping
  - json-lines
  - json-mapping
  - mapforce
description: O Altova MapForce suporta a mapeamento de dados no formato JSON Lines, tanto como fonte como destino. Por exemplo, é possível extrair registos de uma base de dados e convertê-los para o formato .jsonl para posterior utilização.
---
Status: #blog

Tags:  #data-mapping #database-mapping #json-lines #json-mapping #mapforce

Categories: [data-integration](/blog/pt/category/data-integration.md) | [data-integration](/blog/pt/category/data-integration.md) | [json](/blog/pt/category/json.md)
# Mapeamento de dados em formato JSON Lines

O formato de dados JSON continua a evoluir como um padrão aberto, à medida que é aplicado de forma criativa a novas necessidades de intercâmbio de dados. O JSON Lines, definido em [http://jsonlines.org/](http://jsonlines.org/), é um formato de texto conveniente para armazenar dados estruturados, onde cada registo é uma linha e um objeto JSON válido. O JSON Lines lida com dados tabulares e identifica claramente os tipos de dados, sem ambiguidades. Isto permite que os registos sejam processados um a um, o que torna este formato muito útil para exportar e enviar dados.

O Altova MapForce suporta a utilização de ficheiros JSON Lines como fonte ou destino de dados. Vamos analisar um projeto de mapeamento para extrair registos de uma tabela de base de dados e convertê-los para um ficheiro JSON Lines como resultado.

![](/blog/images/JSON_mapping.jpg)

<!--more-->

O MapForce oferece suporte a.. [mapeamento, conversão e transformação avançados de dados](https://www.altova.com/pt/mapforce) entre todos os formatos de dados populares e bases de dados relacionais. Para este exemplo, vamos supor que nos foi pedido para criar um ficheiro JSON Lines que contenha as informações armazenadas numa tabela de uma base de dados, originalmente criada para uma aplicação de inquéritos móveis. A tabela "Cars" faz parte de uma base de dados que contém os nomes dos modelos e as especificações de carros de uma grande variedade de fabricantes.

### **Mapeamento de dados: JSON Lines como formato de saída**

A nossa estratégia para concluir esta tarefa de mapeamento de dados em formato JSON Lines é simples: analisamos a tabela de base de dados existente, criamos um ficheiro de exemplo para representar os dados no formato JSON Lines, mapeamos as colunas da tabela de base de dados para os elementos correspondentes na saída JSON Lines, utilizando um design de mapeamento no MapForce, e, em seguida, basta clicar no botão "Saída do MapForce" para processar automaticamente toda a tabela e gerar o ficheiro de saída.

Utilizaremos ferramentas do Altova MissionKit para completar cada etapa do processo. Primeiramente, vamos abrir o banco de dados com o DatabaseSpy e examinar a tabela "Cars" na vista do designer de tabelas:

[![Tabela de base de dados de origem para mapeamento de dados em formato JSON Lines](/blog/images/table-design-view.png)](table-design-view.png)

A tabela contém 9 colunas que correspondem a tipos de dados de texto (JSON) e numéricos, embora várias colunas possam conter valores nulos. A janela à esquerda mostra o número de 6.266 linhas de dados. Podemos usar o menu de contexto ao clicar com o botão direito para obter as primeiras 200 linhas e examinar os dados:

[![Conteúdo da tabela do banco de dados para mapeamento de dados em formato JSON Lines](/blog/images/table-contents-1.png)](table-contents-1.png)

As linhas 6 e 7 revelam que algumas linhas contêm, de facto, dados nulos. Agora que compreendemos a estrutura dos dados de origem, podemos criar um ficheiro de exemplo simplificado para representar a estrutura dos dados num único objeto JSON [Funcionalidades de edição de JSON](https://www.altova.com/pt/xmlspy-xml-editor#json_editor) O XMLSpy oferece uma ferramenta excelente:

[![Exemplo de ficheiro para mapeamento de dados em formato JSON Lines](/blog/images/jsonl-instance.png)](jsonl-instance.png)

Os nossos dados de entrada em formato JSON são codificados por cores no XMLSpy, e podemos verificar se o ficheiro está bem estruturado. Note que guardámos o ficheiro com a extensão .jsonl para indicar que se trata de um ficheiro JSON Lines.

Em seguida, vamos abrir um novo ficheiro MapForce para mapeamento de dados e inserir a tabela da base de dados e o ficheiro de instância .jsonl:

[![Novo design para a representação de dados em formato JSON Lines](/blog/images/new-data-mapping.png)](new-data-mapping.png)

Quando carregamos o ficheiro .jsonl, o MapForce criou automaticamente um esquema JSON que descreve os possíveis tipos de dados para cada célula no array que representa os nossos dados. O esquema padrão descreve apenas um elemento, mas podemos selecionar o elemento e usar o menu de contexto para adicionar duplicados, criando 8 elementos filhos adicionais:

[![Esquema JSON com 9 elementos para mapeamento de dados em formato JSON Lines](/blog/images/data-mapping-2.png)](data-mapping-2.png)

Em seguida, associamos as colunas da base de dados ao tipo de dado apropriado para cada célula no array JSON, e também associamos a tabela "Cars" ao primeiro elemento no topo do esquema JSON. Isto instrui o mapeamento a criar uma nova linha de saída para cada linha na tabela "Cars".

[![Conectar a fonte de dados do banco de dados ao destino de saída dos dados](/blog/images/data-mapping-3.png)](data-mapping-3.png)

Podemos clicar no botão "Saída" na parte inferior da janela de mapeamento para converter toda a tabela e visualizar os resultados. No entanto, existe uma complicação: não consideramos nenhum valor nulo. Se salvarmos o ficheiro de saída agora, todos os valores nulos na base de dados serão ignorados, resultando em linhas no ficheiro JSON Lines com menos de 9 campos. Estas linhas seriam impossíveis de interpretar corretamente em processamentos posteriores.

### Mapeamento de dados JSON com linhas que contêm valores nulos

O MapForce inclui um filtro que podemos aplicar para identificar e tratar campos nulos:

[![Tratamento de campos nulos ao mapear dados em formato JSON](/blog/images/data-mapping-4-1.png)](data-mapping-4-1.png)

Um único elemento no array JSON não pode ser, ao mesmo tempo, um número e um valor nulo. O filtro e os componentes conectados indicam que os dados nulos na coluna "Cylinder" serão mapeados para o tipo de dado nulo no item 4. Se não for nulo, será mapeado para o tipo de dado numérico. Podemos usar esta mesma estrutura de filtro para todas as colunas restantes que podem conter valores nulos.

O MapForce inclui uma funcionalidade para criar funções personalizadas, que permite guardar a estrutura de um filtro e reutilizá-la neste mapeamento, bem como em outros mapeamentos de dados JSON que incluam valores nulos. Basta selecionar o filtro e os componentes associados e escolher a opção "Criar Função Personalizada" no menu principal de Funções:

[![Criar uma função para o utilizador que processe valores nulos](/blog/images/data-mapping-user-funct-1030x381.png)](data-mapping-user-funct.png)

A função definida pelo utilizador encapsula os componentes selecionados, substitui-os no mapeamento original e é adicionada à Biblioteca de Funções

[![Função para o utilizador detetar dados nulos na base de dados de origem](/blog/images/user-function-def-1.png)](user-function-def-1.png)

Podemos simplesmente arrastar a função do utilizador da biblioteca e conectá-la às outras colunas do banco de dados que podem conter valores nulos.

Por vezes, ao mapear dados em formato JSON, pode ser preferível mapear um valor de texto nulo para uma cadeia de caracteres vazia. O MapForce consegue lidar com essa necessidade através de uma função de substituição de valores ausentes. Na imagem abaixo, um valor de texto nulo na última coluna do banco de dados é mapeado para uma cadeia de caracteres vazia:

[![Mapear um valor nulo para uma cadeia de caracteres vazia](/blog/images/data-mapping-5a.png)](https://www.altova.com/blog/?attachment_id=4698)

Aqui está uma visão geral do mapeamento de dados concluído, com a função de utilizador para detetar valores nulos:

![Uma visão geral do mapeamento de dados concluído para o formato JSON Lines](/blog/images/data-mapping-complete-1030x870.png)

Note a função de utilizador "null-detector" destacada na janela "Bibliotecas" no lado esquerdo.

Agora que todos os valores nulos possíveis foram considerados, podemos clicar no botão "Saída" para gerar o ficheiro de saída .jsonl:

[![Uma visão parcial do ficheiro de saída .jsonl](/blog/images/output-view.png)](output-view.png)

Note que a linha 1675 e outras linhas semelhantes contêm tanto um valor nulo como uma string vazia, mas as linhas 1690 a 1691 estão completamente preenchidas com dados.

Para uma transformação única, este ficheiro de saída pode ser guardado imediatamente. Se a base de dados for atualizada continuamente e precisar de ser transformada novamente mais tarde, podemos guardar o mapeamento como um ficheiro de execução do MapForce Server para processamento automatizado com o MapForce Server, ou implementá-lo diretamente no FlowForce Server.

### Mapeamento de dados: ficheiros JSON como fonte

O mapeamento de dados apresentado abaixo ilustra como mapear um conjunto de dados semelhante, proveniente de um ficheiro .jsonl, para uma tabela de base de dados.

[![Mapeamento de dados a partir de ficheiros JSON para a criação de uma nova tabela numa base de dados](/blog/images/data-mapping-reversed.png)](data-mapping-reversed.png)

Para tornar esta versão mais clara, editámos o esquema JSON no XMLSpy, adicionando descrições e removendo tipos de dados inválidos para cada célula do array. Ao clicar no botão "Output" para esta correspondência, será gerado um script SQL para carregar os dados na tabela da base de dados.

Note que nenhum dos elementos nulos requer uma ligação direta da origem para o destino. Quaisquer valores nulos necessários são inseridos automaticamente na tabela do banco de dados, como se pode ver na linha 18:

[![Script SQL gerado para mapear dados em formato JSON para uma tabela de base de dados](/blog/images/SQL-script-ouput.png)](SQL-script-ouput.png)

[Descarregue uma versão de avaliação gratuita](https://www.altova.com/pt/mapforce/download), que inclui tutoriais, ajuda e muitos exemplos, para começar o seu próprio projeto de mapeamento de dados JSON Lines ou para outras necessidades de mapeamento, conversão e transformação de dados!
