Мастер Claude · Блок 1. Первые шаги

Урок 6 из 93 · ~10 мин чтения

Форматы вывода: --output-format

Урок пока закрыт

Курс проходится последовательно.

К текущему уроку

Обновление, август 2026

К текстовому и машинному форматам добавился третий: результат можно опубликовать живой страницей по ссылке — артефактом.

Актуальная версия: Урок 66. Артефакты

Почему это важно именно вам

Когда Claude отвечает в браузере — вы читаете текст глазами. Когда Claude отвечает в терминале — результат может идти дальше: в скрипт, в таблицу, в другой инструмент. И вот тут формат становится критическим.

Если ответ — просто текст, а вам нужно извлечь из него конкретные поля (имя, сумма, дата), придётся разбирать текст вручную или писать сложный парсер. Если ответ приходит сразу в JSON с нужными полями — вы можете сразу передать его дальше.

Параметр --output-format — это способ сказать Claude: «мне не нужно красивое изложение, мне нужна машиночитаемая структура». Для директора, который строит хотя бы минимальные автоматизации — это разница между «работает» и «не работает».

Что это такое

Claude Code поддерживает три формата вывода:

Аналогия: text — это устный ответ коллеги. json — это заполненная форма с полями. Форму проще обработать программой, устный ответ — проще прочитать человеку.

Как работает на практике

Стандартный текстовый вывод

claude -p "напиши три вывода из этого отчёта" < отчёт.txt
# выводит красиво отформатированный текст

JSON вывод

claude -p "напиши три вывода из этого отчёта" --output-format json < отчёт.txt

Ответ придёт в виде JSON-объекта. Структура вывода включает поле result с текстом ответа и метаданные сессии.

{
  "result": "1. Продажи выросли на 12%...\n2. Основной...",
  "session_id": "...",
  "total_cost_usd": 0.003
}

Поле result

В headless-режиме (-p) с --output-format json ответ Claude находится в поле result. Это строка. Если Claude вернул markdown-список — он будет внутри этой строки как текст с \n.

Извлечение конкретного поля через jq

jq — это инструмент для работы с JSON в терминале. Устанавливается отдельно:

# macOS
brew install jq

# Ubuntu/Debian
apt install jq

После установки можно извлекать поля:

claude -p "дай ответ" --output-format json | jq '.result'

Практический пример: извлечение данных из документов

Допустим, нужно извлечь из каждого акта три поля: контрагент, сумма, дата. Попросите Claude вернуть JSON:

claude --model haiku \
  -p 'извлеки из этого акта три поля и верни ТОЛЬКО JSON без пояснений: {"contractor": "...", "amount": "...", "date": "..."}' \
  --output-format json \
  < акт.txt | jq '.result | fromjson'

Здесь:
- --output-format json — оборачивает ответ Claude в JSON
- jq '.result' — извлекает поле result (ответ Claude)
- fromjson — парсит JSON внутри строки result

Результат: чистый JSON с тремя полями, готовый к дальнейшей обработке.

Сборка реестра из нескольких документов

echo "[" > реестр.json
for f in акты/*.txt; do
  claude --model haiku \
    -p 'верни ТОЛЬКО JSON: {"contractor": "...", "amount": "...", "date": "..."}' \
    --output-format json < "$f" | jq '.result | fromjson'
  echo ","
done >> реестр.json
echo "]" >> реестр.json

Результат — JSON-массив, который можно открыть в Excel как структурированные данные или передать в любой инструмент аналитики.

Stream-JSON

claude -p "напиши длинный анализ" --output-format stream-json < документ.txt

Ответ будет приходить построчно по мере генерации. Каждая строка — отдельный JSON-объект с частью ответа. Используется в интерфейсах, которые показывают ответ в реальном времени. Для большинства задач директора достаточно json.

Просите Claude вернуть JSON явно

--output-format json оборачивает ответ в JSON-конверт, но сам текст ответа остаётся текстом. Есть прямой способ получить структуру: флаг --json-schema со схемой — тогда разобранный результат придёт в поле structured_output. Или, по старинке, явно попросите Claude: «верни только JSON без пояснений» и опишите структуру. Claude понимает такие инструкции хорошо.

Частые ошибки

Ошибка 1. Путать --output-format json и «попросить вернуть JSON»

Это разные вещи. --output-format json — это оболочка вокруг ответа. Содержимое ответа (поле result) будет таким, каким попросите. Для структурированных данных нужно и то, и другое: флаг + инструкция в промте.

Ошибка 2. Парсить JSON вручную в bash

Не делайте этого. Используйте jq. Ручной парсинг через grep и sed сломается на первом же нестандартном ответе.

Ошибка 3. Ожидать стабильный JSON без явной инструкции

Если написать просто «проанализируй и верни результат», Claude вернёт текст. Для получения JSON нужна явная инструкция: «верни только JSON в формате {"поле": значение}».

Ошибка 4. Игнорировать поле total_cost_usd

В JSON-ответе есть поле total_cost_usd с реальной стоимостью запроса. Если вы обрабатываете много документов — полезно суммировать это поле, чтобы понимать расходы:

cat *.json | jq '.total_cost_usd' | awk '{s+=$1} END {print "Total: $" s}'

Когда нужно / когда нет

--output-format json нужен, если:
- Результат будет обрабатываться скриптом
- Нужно извлечь конкретные поля из ответа
- Строите автоматизацию или конвейер
- Нужно сохранить метаданные (стоимость, session_id)

text достаточно, если:
- Читаете ответ глазами
- Разовый запрос без дальнейшей автоматизации
- Сохраняете в файл для чтения человеком

stream-json нужен, если:
- Строите интерфейс с отображением ответа в реальном времени
- Длинный ответ и нужно начать обработку до его завершения

Связь с другими уроками

Задание на сегодня

Выполните запрос с явной инструкцией вернуть JSON и посмотрите на структуру ответа:

echo "Встреча с подрядчиком 5 июня. Обсуждали смету 2.4 млн руб. Следующий шаг — проверить расчёты до 10 июня." | \
claude -p 'извлеки из текста: дату, сумму, дедлайн. Верни ТОЛЬКО JSON: {"date": "...", "amount": "...", "deadline": "..."}' \
--output-format json

Обратите внимание на структуру ответа: поле result содержит JSON-строку, вокруг — метаданные.

Критерий выполнено: получили JSON-ответ, нашли в нём поле result с нужными данными.

Резюме

Следующий урок откроется после отметки.