Avatar ·

Как красиво вывести (pretty-print) JSON в JavaScript: читаемый формат с отступами

Всем привет! Я новичок в JavaScript и работаю с API, которые возвращают данные в формате JSON. Когда я вывожу объект через `console.log()`, он отображается в одну строку, и это очень неудобно читать, особенно если объект большой и вложенный. Вот пример моего кода: ```javascript const data = { name: "Иван", age: 30, address: { city: "Москва", street: "Тверская", zip: 101000 }, hobbies: ["программирование", "чтение", "спорт"] }; console.log(data); ``` В консоли я вижу что-то вроде: `{name: "Иван", age: 30, address: {city: "Москва", street: "Тверская", zip: 101000}, hobbies: ["программирование", "чтение", "спорт"]}`. Это нечитаемо! Я пробовал использовать `JSON.stringify()`, но результат всё равно выводится в одну строку. Мне нужно, чтобы JSON отображался с отступами, как в редакторах кода или на сайтах вроде JSON Formatter. Подскажите, как сделать красивый вывод (pretty-print) JSON в JavaScript? Желательно с примерами кода и объяснением параметров. <<>>

Используйте JSON.stringify() с параметрами для форматирования

Самый простой и мощный способ красиво вывести JSON в JavaScript — это использовать встроенный метод JSON.stringify() с дополнительными параметрами. По умолчанию он возвращает строку без пробелов, но мы можем добавить отступы с помощью третьего аргумента.

Базовый синтаксис

Метод принимает три параметра:

JSON.stringify(value, replacer, space)
  • value — объект или значение, которое нужно преобразовать в JSON
  • replacer — функция или массив для фильтрации свойств (можно передать null, если не нужен)
  • space — количество пробелов для отступа или строка-разделитель

Пример с пробелами

Вот как вы можете красиво вывести ваш объект:

const data = {
  name: "Иван",
  age: 30,
  address: {
    city: "Москва",
    street: "Тверская",
    zip: 101000
  },
  hobbies: ["программирование", "чтение", "спорт"]
};

// Используем 2 пробела для отступа
const prettyJSON = JSON.stringify(data, null, 2);
console.log(prettyJSON);

Результат в консоли:

{
  "name": "Иван",
  "age": 30,
  "address": {
    "city": "Москва",
    "street": "Тверская",
    "zip": 101000
  },
  "hobbies": [
    "программирование",
    "чтение",
    "спорт"
  ]
}

Параметр space: разные варианты

Вы можете использовать не только число, но и строку для отступа:

// 4 пробела
console.log(JSON.stringify(data, null, 4));

// Строка-табуляция
console.log(JSON.stringify(data, null, '\t'));

// Любая строка (например, "---")
console.log(JSON.stringify(data, null, '  '));

Практический совет: создайте функцию-помощник

Для удобства можно создать небольшую утилиту, которая сразу выводит отформатированный JSON в консоль:

function prettyPrint(obj, indent = 2) {
  console.log(JSON.stringify(obj, null, indent));
}

// Использование
prettyPrint(data, 4);

Как отформатировать JSON-строку

Если у вас уже есть строка JSON (например, полученная из API), сначала преобразуйте её в объект, а потом обратно:

const jsonString = '{"name":"Иван","age":30,"address":{"city":"Москва"}}';
const obj = JSON.parse(jsonString);
const formatted = JSON.stringify(obj, null, 2);
console.log(formatted);

Важные замечания

  • JSON.stringify() удаляет функции, undefined и символы — они не поддерживаются в JSON
  • Если объект содержит циклические ссылки, метод выбросит ошибку — для таких случаев нужны дополнительные библиотеки
  • Параметр replacer (второй аргумент) позволяет фильтровать или изменять значения перед форматированием

Этот метод работает во всех современных браузерах и Node.js, не требует установки дополнительных библиотек и даёт полный контроль над форматированием.

<<>>

Альтернативный подход: использование console.dir() для интерактивного просмотра

Если вам не нужно сохранять отформатированный JSON как строку, а достаточно просто удобно просмотреть объект в консоли браузера, используйте метод console.dir(). Он отображает объект в интерактивном виде с возможностью сворачивать и разворачивать вложенные свойства.

const data = {
  name: "Иван",
  age: 30,
  address: { city: "Москва", street: "Тверская" },
  hobbies: ["программирование", "спорт"]
};

// Интерактивный просмотр
console.dir(data, { depth: null, colors: true });

Параметры объекта options:

  • depth — глубина вложенности (число или null для бесконечной)
  • colors — подсветка синтаксиса (булево значение)

Этот метод особенно удобен в браузерной консоли, где можно кликать по свойствам и исследовать структуру данных. Однако он не подходит, если нужно получить строку для сохранения в файл или отправки на сервер. Для таких случаев возвращайтесь к JSON.stringify() с отступами — это универсальное решение.