Завдання та передумови

Взяти масив data.items із JSON та створити плоский CSV з узгодженим порядком колонок.

Приклад містить навчальні дані та налаштування. Виберіть власні тестові джерела й підключення замість ідентифікаторів demo_*, відтворіть очікуваний результат і лише потім використовуйте робочі об’єкти.

Навчальні вхідні дані

{
  "data": {
    "items": [
      {
        "sku": "T01",
        "name": "Tea",
        "stock": 12
      },
      {
        "sku": "C01",
        "name": "Coffee",
        "stock": 5
      }
    ]
  },
  "generated": "demo"
}

Блоки, зв’язки й точні налаштування

Пояснювальна схемаЗбільшити ↗03. JSON: витяг масиву вкладених записів. Топологія прикладу 03: 3 блоки, 2 зв’язки. Збережено ідентифікатори вузлів і порти налаштованого графа.
Схема потоку 03

Топологія прикладу 03: 3 блоки, 2 зв’язки. Збережено ідентифікатори вузлів і порти налаштованого графа.

Додайте наведені блоки в конструктор, відкрийте властивості кожного й установіть такі значення. Назви demo_* позначають навчальні джерела та підключення.

БлокНалаштування
1
Файл
src
  • Роль: source
  • Джерело: demo_inventory_json
  • Параметри читання:
    • Шлях до записів JSON: /data/items
    • Діапазон: A1:C3
    • Перший рядок — заголовок: так
2
Мапінг колонок
map
  • Режим: columns
  • Колонки:
      • Назва: SKU
      • Значення: sku
      • Назва: Name
      • Значення: name
      • Назва: Stock
      • Значення: stock
3
Вивантаження даних
out
  • Формат: csv
  • Ім’я файлу: inventory
  • Призначення: download
  • Роздільник: ;
  • Часовий пояс: Europe/Kyiv

Зв’язки портів

  • src out → map in
  • map out → out in
Повна конфігурація графа JSON
{
  "version": 3,
  "nodes": [
    {
      "id": "src",
      "type": "file",
      "label": "src",
      "config": {
        "role": "source",
        "source_id": "demo_inventory_json",
        "options": {
          "json_path": "/data/items",
          "range": "A1:C3",
          "header": true
        }
      }
    },
    {
      "id": "map",
      "type": "mapping",
      "label": "map",
      "config": {
        "mode": "columns",
        "columns": [
          {
            "name": "SKU",
            "value": "sku"
          },
          {
            "name": "Name",
            "value": "name"
          },
          {
            "name": "Stock",
            "value": "stock"
          }
        ]
      }
    },
    {
      "id": "out",
      "type": "export",
      "label": "out",
      "config": {
        "format": "csv",
        "filename": "inventory",
        "destination": "download",
        "delimiter": ";",
        "timezone": "Europe/Kyiv"
      }
    }
  ],
  "edges": [
    {
      "source": "src",
      "target": "map",
      "source_port": "out",
      "target_port": "in"
    },
    {
      "source": "map",
      "target": "out",
      "source_port": "out",
      "target_port": "in"
    }
  ]
}

Очікуваний результат

SKUNameStock
T01Tea12
C01Coffee5

Запуск і перевірка

  1. Збережіть наведений JSON у inventory.json та додайте його як файлове джерело.
  2. Укажіть json_path=/data/items, а в мапінгу — точні початкові назви sku, name, stock.
  3. Запустіть і перевірте inventory.csv: два рядки, немає службового generated.

Типові помилки

  • Файлове джерело використовує JSON Pointer /data/items. Це відрізняється від шляху data.items у REST API-підключенні.
  • Шлях має вести до записів: помилка в items дасть відсутній шлях або неправильну структуру.
  • Мапінг чутливий до точних назв полів; SKU є назвою виходу, sku — назвою входу.