---
referenceVersion: 2
---

# Обработка данных

`data` собирает значения и преобразует структурированные данные в памяти.

## Параметры

| operation | Входы | Выходы |
| --- | --- | --- |
| `build` | value: JSON | value |
| `table` | rows, header/columns, first_row, where, limit | records, count, first |
| `difference` | source, target, source_key, target_key, trim, casefold, skip_empty, limit | items, count, remaining |
| `parse` | format=json, text | value |
| `serialize` | format=json, value, pretty=false | text |

Невалидный JSON завершает parse ошибкой. Результат build читается через `{step.value}`.

## Пример

```yaml [Фрагмент формата v2]
- id: payload
  block: data
  params:
    operation: build
    value:
      title: "{inputs.title}"
      published: false
```

## Результат

Каждая операция возвращает поля из своей схемы в таблице выше. Например, `{payload.value}` — построенный объект; `parse` возвращает `value`, `serialize` — `text`.

## Поведение

Невалидный JSON завершает `parse` ошибкой. Блок не выполняет сетевые запросы и пользовательский код. Дополнения сначала рассматриваем внутри `data` с отдельными схемами операций.

## Таблица

Без `columns` первая строка — заголовок. Явные `columns` означают отсутствие заголовка; `header=true` вместе с `columns` запрещён.

`first_row` задаёт номер первой строки данных: по умолчанию 2 с заголовком, иначе 1. Поле `row` хранит исходный номер и не может перезаписать одноимённую колонку. `where` содержит `field`, `op`, `expected`.

Пустой ввод возвращает `records=[]`, `count=0`, `first=null`.

## Разность наборов

Возвращаются элементы `source`, ключей которых нет в `target`: без повторов, в исходном порядке. `source_key`/`target_key` — пути JSON Pointer; пустой путь выбирает скалярный элемент целиком.

`trim`, `casefold` и `skip_empty` по умолчанию `false`: удаление пробелов, сравнение без регистра и пропуск пустых ключей включаются явно. В формате v2 `limit` — положительное число или `null` (по умолчанию): ограничение самой операции отсутствует, но действует общий предел установки. `remaining` — число уникальных элементов вне заданного лимита. Старые сценарии с пределом 100 при миграции задают его явно.

<details>
<summary>Перенос старого table_difference</summary>

Старый блок неявно нормализует строки и умеет числовой фильтр. Эти правила нужно явно выразить в workflow при миграции.

</details>

<span id="решения-по-параметрам"></span>

## Параметры операций

Для `build` оставляем одно `value`, для `parse`/`serialize` — явный `format`. JSON входит в базовую часть пакета `data`, отдельного extra не требуется. `header` и `columns` описывают альтернативные способы задания колонок; конфликт отклоняется. Дубликаты имён и столкновение с служебным полем `row` должны давать понятную ошибку, а не терять данные.

У `difference` убираем привязку к фиксированному максимуму 100: предел задаёт вызывающий или установка. Пути ключей остаются JSON Pointer, нормализация строк — только явными флагами. Автоматическое приведение чисел и строк к одному ключу не включаем.

<span id="модули-и-поставка"></span>

## Плагины и установка

В составе блока: Сборка значений, таблицы, разность наборов, JSON и CSV.

| Плагин | Возможности |
| --- | --- |
| `yaml` | Чтение и сериализация YAML-данных |
| `xml` | Разбор, выборка и сериализация XML |
| `xlsx` | Листы и значения Excel |
| `parquet` | Колоночные таблицы |
| `markup` | Markdown/HTML и извлечение текста |

Параметры выше описывают операции с JSON и таблицами. Форматы имеют отдельные схемы и ограничения размера/глубины; пользовательский код и сетевые запросы не выполняются.
