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/, é 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.

O MapForce oferece suporte a.. mapeamento, conversão e transformação avançados de dados 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:

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:

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 O XMLSpy oferece uma ferramenta excelente:

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:

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:

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

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:

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:

A função definida pelo utilizador encapsula os componentes selecionados, substitui-os no mapeamento original e é adicionada à Biblioteca de Funções

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:

Aqui está uma visão geral do mapeamento de dados concluído, com a função de utilizador para detetar valores nulos:

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:

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.

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:

Descarregue uma versão de avaliação gratuita, 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!