JSON de proveedor: carga, snapshot y transformaciones

Cómo Eofferix recibe archivos y respuestas JSON, crea un snapshot de nodos únicos y transforma datos en XML, tablas, otro JSON o una importación.

Eofferix acepta archivos JSON y respuestas JSON. Puede cargar un archivo una sola vez, recibirlo automáticamente desde un adjunto de email, tomarlo por un enlace directo, por un enlace con autorización, por FTP/FTPS/SFTP o desde la API del proveedor.

Después de recibir los datos, JSON puede convertirse en XML, tablas CSV/XLSX, otro JSON con parámetros y valores editados, o importarse en aplicaciones compatibles con el servicio.

Snapshot JSON de proveedor en Eofferix
Después de cargarlo, el servicio muestra un snapshot corto con nodos únicos y valores de ejemplo.

Cómo funciona el snapshot

El servicio analiza el archivo y lo convierte en un snapshot corto con nodos únicos. Si un array contiene mil productos, el snapshot muestra la estructura de un elemento típico y el conjunto de campos encontrados, no mil repeticiones.

En el snapshot puede renombrar nodos, cambiar la estructura, quitar campos innecesarios, crear nodos nuevos y configurar reglas de transformación. En la siguiente ejecución, esas reglas se aplican a todo el JSON recibido de la fuente.

Qué se puede transformar

  • Renombrar campos. Por ejemplo, convertir id en external_id, name en title y prices.base en price.
  • Filtrar registros. Dejar solo productos donde flags.active = true, o exportar solo productos con stock mayor que cero.
  • Cambiar anidación. Expandir stock[] en una lista de almacenes, reunir attributes[] como propiedades y mover imágenes a un nodo media.
  • Calcular valores. Crear una ruta de categoría, calcular precio con descuento, normalizar moneda o llenar la fecha de importación.
  • Transformar imágenes. Convertir imágenes a jpg, png o webp, cambiar su tamaño y aplicar una marca de agua.
  • Importar en una aplicación. Vincular nodos JSON a campos de catálogo, CRM, CMS u otro destino compatible.
Ajustes del valor Precio con reglas de transformación JSON
Ejemplo de transformaciones secuenciales para el campo Precio. Las transformaciones pueden usar no solo el valor actual, sino también otros nodos del documento para los cálculos.

Ejemplos de transformaciones

Las reglas de transformación permiten cambiar profundamente la exportación final: filtrar elementos, renombrar nodos, crear una estructura nueva, calcular valores, rellenar campos nuevos desde otras partes del documento y preparar el resultado para un marketplace, sitio web, PIM o sistema interno.

Qué hace el ejemplo de precio

Abajo se muestran las mismas reglas por pasos. Cada captura muestra solo la fila de regla responsable del paso actual.

1. Primero se eliminan los espacios del valor del precio. Es útil cuando el proveedor envía el precio como una cadena, por ejemplo 12 990.

Eliminar espacios

2. Si el precio no está vacío, el servicio lo aumenta un 15%. Así se añade margen sin cambiar el JSON de origen.

Paso 2: calcular margen

3. Después, la regla comprueba otro nodo del documento: /catalog/items/stock/qty. Si el stock es menor que 5, el precio se reemplaza por 0.

Paso 3: stock menor que 5 - reemplazar por 0

4. Otra regla usa /catalog/items/brand: para TestBrand, el precio se multiplica además por 1,5.

Paso 4: TestBrand - multiplicar por 1,5

5. Al final, el resultado se redondea a un decimal con reglas estándar.

Paso 5: redondear el resultado

Ejemplo simple: renombrar campos y dejar productos activos

Este ejemplo toma elementos de catalog.items[], deja solo productos activos y adapta los nombres de campos al formato de destino.

Antes
datos de origen
{
  "id": "A-100",
  "sku": "ITEM-100",
  "name": "Nordic armchair",
  "prices": {
    "base": 129.90,
    "discount": 119.90
  },
  "flags": {
    "active": true
  }
}
Después
después de configurar
{
  "external_id": "A-100",
  "sku": "ITEM-100",
  "title": "Nordic armchair",
  "price": 119.90,
  "old_price": 129.90
}

Reglas:

  1. En el JSON de origen hay un producto con id = A-100. Los demás productos tienen la misma estructura, pero el snapshot muestra un elemento representante del arreglo repetido catalog.items[]. Haz clic en el valor true dentro del objeto flags, en el campo active, y en Condiciones de exportación elige Condición para todo el elemento. Así se exportan solo elementos con true, o se excluyen elementos con false.
    Condiciones de exportación para un producto activo
    La condición se aplica al elemento completo: el producto se exporta si flags.active es igual a true; la segunda regla puede usarse como comprobación inversa para false.
  2. Renombra el nodo id a external_id: haz clic en el nombre del nodo e introduce el nombre nuevo.
    Renombrar id a external_id
    Ajustes del nodo: external_id se introduce en el campo Nombre del nodo.
  3. Renombra name a title del mismo modo. No hace falta otra captura: la acción es igual que para id.
  4. Hay dos escenarios válidos para los precios. Si el contenedor prices sirve, renombra prices.discount a price y prices.base a old_price. Si price y old_price deben estar al nivel del producto, crea nodos nuevos junto a id y name, rellénalos desde /catalog/items/prices/discount y /catalog/items/prices/base, y luego no exportes el contenedor antiguo prices.
    Rellenar el nodo nuevo price desde prices.discount
    Para el campo nuevo price se usa la acción reemplazar: el valor se toma de otro nodo del documento.

Nodos nuevos

Un nodo nuevo es necesario cuando el resultado debe contener un campo que no existe en el JSON de origen, o cuando los datos de origen deben reorganizarse.

Agregar el nodo final_price en el snapshot JSON

Un nodo se puede rellenar con:

  1. un valor de otra parte del archivo de origen, por ejemplo el nombre, SKU, marca, o varios valores unidos en un solo campo como Nombre SKU Marca;
  2. un valor del sistema, como la fecha de ejecución o el nombre de la fuente;
  3. una expresión, por ejemplo unir la ruta de categoría o calcular el porcentaje de descuento;
  4. también se puede convertir en variable.

Variables: por qué son necesarias

Una variable guarda un resultado intermedio. Es práctica cuando un valor debe usarse en varios campos o condiciones.

Importante: las variables no aparecen en la exportación final. Solo ayudan a otras transformaciones: puedes guardar un resultado intermedio y usarlo después en reglas, condiciones o cálculos.

Configurar final_price como variable
Un nodo puede convertirse en variable: se calcula antes que otros campos y se reutiliza en reglas y condiciones.

Por ejemplo, final_price se calcula una vez:

final_price = prices.discount si prices.discount está lleno; si no, prices.base

Después se puede usar en varias reglas:

  • product.prices.price = final_price;
  • product.prices.old_price = prices.base, si final_price es menor que el precio base;
  • product.prices.discount_percent se calcula desde prices.base y final_price;
  • la condición de exportación comprueba que final_price sea mayor que cero.

Así las reglas son más cortas y el precio no se desincroniza en distintas partes del resultado por cálculos manuales repetidos.