# Структурированный вывод: ровно тот JSON, что нужен

Курс: Claude API для разработчиков — https://zero2claude.ru/learn/api
Канонический URL: https://zero2claude.ru/learn/api/2-2-strukturirovannyy-vyvod

Структурированный вывод заставляет модель отвечать по JSON-схеме через output_config.format — результат парсится без регулярок.

## Проблема свободного текста

Ты парсишь отзывы интернет-магазина и хочешь из каждого вытащить оценку и тег проблемы. Если просто попросить модель «верни JSON», она иногда добавит «Конечно, вот результат:» или обернёт ответ в ```. Парсить такое регулярками — боль и баги.

## Решение: схема в запросе

Передай JSON Schema в `output_config.format`, и API гарантирует, что ответ ей соответствует.

```
{
  "model": "claude-opus-4-8",
  "max_tokens": 1024,
  "messages": [
    {"role": "user", "content": "Отзыв: доставка три дня, телефон царапнут"}
  ],
  "output_config": {
    "format": {
      "type": "json_schema",
      "schema": {
        "type": "object",
        "properties": {
          "rating": {"type": "integer"},
          "issue": {"type": "string"}
        },
        "required": ["rating", "issue"],
        "additionalProperties": false
      }
    }
  }
}
```

Параметр называется `output_config.format`. Старый `output_format` устарел — не используй его.

## В Python удобно через parse()

Метод `client.messages.parse()` сам валидирует ответ по схеме — никаких регулярок.

```
from anthropic import Anthropic

client = Anthropic()
schema = {
    "type": "object",
    "properties": {"rating": {"type": "integer"}, "issue": {"type": "string"}},
    "required": ["rating", "issue"],
    "additionalProperties": false,
}
resp = client.messages.parse(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Отзыв: всё супер, привезли за день"}],
    output_config={"format": {"type": "json_schema", "schema": schema}},
)
```

Если придёт `stop_reason: "refusal"` или `"max_tokens"`, ответ может не соответствовать схеме — проверь это перед разбором.
