Mapeo de datos en formato JSON Lines

El formato de datos JSON continúa evolucionando como un estándar abierto, a medida que se aplica de manera creativa a nuevas necesidades de intercambio de datos. JSON Lines, definido en http://jsonlines.org/, es un formato de texto conveniente para almacenar datos estructurados, donde cada registro es una línea y un objeto JSON válido. JSON Lines maneja datos tabulares e identifica claramente los tipos de datos sin ambigüedad. Esto permite procesar los registros uno por uno, lo que hace que este formato sea muy útil para exportar y enviar datos.

Altova MapForce permite utilizar archivos JSON Lines como fuente o destino de datos. Analicemos un proyecto de mapeo para extraer registros de una tabla de base de datos y convertirlos a un archivo JSON Lines como resultado.

MapForce ofrece soporte para.. mapeo, conversión y transformación de datos avanzados entre todos los formatos de datos populares y las bases de datos relacionales. Para este ejemplo, supongamos que se nos ha encargado crear un archivo JSON Lines que contenga la información almacenada en una tabla de una base de datos, originalmente creada para una aplicación de encuestas móviles. La tabla "Cars" (Automóviles) forma parte de una base de datos que contiene nombres de modelos y especificaciones de automóviles de una amplia variedad de fabricantes.

Mapeo de datos: formato JSON Lines como formato de salida

Nuestra estrategia para completar esta tarea de mapeo de datos en formato JSON Lines es sencilla: examinamos la tabla de la base de datos existente, creamos un archivo de ejemplo pequeño para representar los datos en formato JSON Lines, mapeamos las columnas de la tabla de la base de datos a los elementos correspondientes en la salida JSON Lines mediante un diseño de mapeo en MapForce, y luego simplemente hacemos clic en el botón de salida de MapForce para procesar automáticamente toda la tabla y generar el archivo de salida.

Utilizaremos herramientas del conjunto Altova MissionKit para completar cada paso del proceso. Primero, abriremos la base de datos con DatabaseSpy y examinaremos la tabla "Cars" en la vista del diseñador de tablas:

La tabla contiene 9 columnas que corresponden a tipos de datos de cadena y numéricos en formato JSON, aunque se permite que varias columnas tengan valores nulos. La ventana de la izquierda muestra el número de 6.266 filas de datos. Podemos utilizar el menú contextual al hacer clic derecho para recuperar las primeras 200 filas y examinar los datos:

Las líneas 6 y 7 revelan que algunas filas contienen, efectivamente, datos nulos. Ahora que comprendemos la estructura de los datos de origen, podemos crear un archivo de ejemplo pequeño para representar la estructura en una sola línea JSON. Las funciones de edición de JSON de XMLSpy proporcionan una herramienta excelente:

Nuestros datos de entrada en formato JSON están codificados por colores en XMLSpy, y podemos verificar que el archivo está correctamente estructurado. Tenga en cuenta que hemos guardado el archivo con la extensión .jsonl para indicar que se trata de un archivo JSON Lines.

A continuación, abriremos un nuevo proyecto de MapForce, importaremos la tabla de la base de datos y el archivo de instancia .jsonl:

Cuando importamos el archivo .jsonl, MapForce creó automáticamente un esquema JSON que describe los posibles tipos de datos para cada celda en el array que representa nuestros datos. El esquema predeterminado solo describe un elemento, pero podemos seleccionar el elemento y utilizar el menú contextual para añadir duplicados, creando así 8 elementos secundarios adicionales:

A continuación, conectamos las columnas de la base de datos con el tipo de dato adecuado para cada elemento del array JSON, y también conectamos la tabla "Cars" con el primer elemento que se encuentra en la parte superior del esquema JSON. Esto indica al mapeo que cree una nueva línea de salida para cada fila de la tabla "Cars".

Podríamos hacer clic en el botón "Salida" que se encuentra en la parte inferior de la ventana de mapeo para convertir toda la tabla y previsualizar los resultados. Sin embargo, existe una complicación: no hemos considerado los valores nulos. Si guardamos el archivo de salida ahora, cualquier valor nulo en la base de datos se omitirá por completo, lo que dejará líneas en el archivo JSON Lines con menos de 9 campos. Estas líneas serían imposibles de interpretar correctamente en procesos posteriores.

Mapeo de datos en formato JSON Lines con valores nulos

MapForce incluye un filtro que podemos utilizar para identificar y gestionar los campos nulos

Un único elemento en el array JSON no puede ser tanto un número como un valor nulo. El filtro y los componentes conectados indican que los datos nulos en la columna "Cylinder" se mapearán al tipo de dato nulo en el elemento número 4. Si no es nulo, se mapeará al tipo de dato numérico. Podemos utilizar esta misma estructura de filtro para todas las columnas restantes que puedan contener valores nulos.

MapForce incluye una función para crear funciones personalizadas que permite guardar la estructura del filtro y reutilizarla en este mapeo, así como en otros mapeos de datos JSON que incluyan valores nulos. Simplemente seleccionamos el filtro y los componentes relacionados, y elegimos la opción "Crear función definida por el usuario" en el menú principal de "Funciones":

La función definida por el usuario encapsula los componentes seleccionados, los reemplaza en el mapeo original y se añade a la Biblioteca de Funciones

Simplemente podemos arrastrar la función del usuario desde la biblioteca y conectarla a las otras columnas de la base de datos que admiten valores nulos.

A veces, al mapear datos en formato JSON, puede ser preferible mapear un valor de texto nulo a una cadena vacía. MapForce puede manejar este requisito utilizando una función de sustitución para valores faltantes. En la imagen que se muestra a continuación, un valor de texto nulo en la última columna de la base de datos se mapea a una cadena vacía:

Aquí se muestra una vista del mapeo de datos completado, utilizando la función de usuario para la detección de valores nulos:

Observe la función de usuario "null-detector" que se destaca en la ventana de "Bibliotecas" que se encuentra en el lado izquierdo.

Una vez que se han considerado todos los posibles valores nulos, podemos hacer clic en el botón "Salida" para generar el archivo de salida con formato .jsonl

Tenga en cuenta que la línea 1675 y otras contienen tanto un valor nulo como una cadena vacía, pero las líneas 1690 y 1691 están completamente llenas de datos.

Para una transformación única, este archivo de salida se puede guardar inmediatamente. Si la base de datos se actualiza continuamente y necesita ser transformada nuevamente más adelante, podemos guardar la configuración como un archivo de ejecución de MapForce Server para su procesamiento automatizado con MapForce Server, o bien, podemos implementarla directamente en FlowForce Server.

Mapeo de datos: archivos JSON como fuente de datos

El siguiente esquema de mapeo de datos ilustra cómo se puede transformar un conjunto de datos similar, proveniente de un archivo de origen .jsonl, a una tabla de base de datos.

Para que esta versión sea más clara, hemos editado el esquema JSON en XMLSpy para añadir descripciones y eliminar los tipos de datos inválidos para cada celda del array. Al hacer clic en el botón "Salida" para esta configuración, se generará un script SQL para cargar los datos en la tabla de la base de datos.

Tenga en cuenta que ninguno de los elementos nulos requiere una conexión desde la fuente hasta el destino. Cualquier valor nulo necesario se inserta automáticamente en la tabla de la base de datos, como se muestra en la línea 18:

Descargue una versión de prueba gratuita que incluye tutoriales, ayuda y muchos ejemplos para que pueda comenzar con su propio proyecto de mapeo de datos en formato JSON Lines u otras necesidades de mapeo, conversión y transformación de datos.