Как форматировать JSON: Полное руководство
Научитесь правильно форматировать JSON для улучшения читаемости. Инструменты, методы и лучшие практики форматирования JSON.
Big JSON Team
• Technical WriterExpert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.
# Как форматировать JSON: Полное руководство
Правильно отформатированный JSON критически важен для читаемости, отладки и поддержки кода. В этом подробном руководстве мы рассмотрим все аспекты форматирования JSON - от базовых принципов до продвинутых техник и инструментов.
Почему форматирование JSON важно
Неотформатированный JSON трудно читать и отлаживать:
{"пользователь":{"имя":"Иван","возраст":30,"адрес":{"город":"Москва","улица":"Тверская"}},"заказы":[{"id":1,"сумма":5000},{"id":2,"сумма":3500}]}
Отформатированный JSON намного понятнее:
{
"пользователь": {
"имя": "Иван",
"возраст": 30,
"адрес": {
"город": "Москва",
"улица": "Тверская"
}
},
"заказы": [
{
"id": 1,
"сумма": 5000
},
{
"id": 2,
"сумма": 3500
}
]
}
Основные правила форматирования JSON
1. Отступы и пробелы
Используйте последовательные отступы для каждого уровня вложенности:
2 пробела (рекомендуется):{
"компания": {
"название": "ТехКорп",
"сотрудники": [
{
"имя": "Анна",
"должность": "Разработчик"
}
]
}
}
4 пробела:
{
"компания": {
"название": "ТехКорп",
"сотрудники": [
{
"имя": "Анна",
"должность": "Разработчик"
}
]
}
}
Табуляция:
{
"компания": {
"название": "ТехКорп",
"сотрудники": [
{
"имя": "Анна",
"должность": "Разработчик"
}
]
}
}
2. Переносы строк
Каждая пара ключ-значение на отдельной строке:
✅ Правильно:
{
"имя": "Иван",
"возраст": 30,
"город": "Москва"
}
❌ Неправильно:
{"имя":"Иван","возраст":30,"город":"Москва"}
3. Пробелы вокруг символов
Добавляйте пробелы после двоеточий и запятых:
✅ Правильно:
{
"ключ": "значение",
"массив": [1, 2, 3]
}
❌ Неправильно:
{
"ключ":"значение",
"массив":[1,2,3]
}
4. Массивы
Размещайте элементы массива в зависимости от их типа:
Простые значения (одна строка):{
"числа": [1, 2, 3, 4, 5],
"цвета": ["красный", "синий", "зелёный"]
}
Объекты (каждый на новой строке):
{
"пользователи": [
{
"id": 1,
"имя": "Алексей"
},
{
"id": 2,
"имя": "Мария"
}
]
}
Форматирование в разных языках программирования
JavaScript
// Базовое форматирование
const данные = { имя: "Иван", возраст: 30 };
const форматированный = JSON.stringify(данные, null, 2);
console.log(форматированный);
// {
// "имя": "Иван",
// "возраст": 30
// }
// Пользовательское форматирование с заменой
const комплексныеДанные = {
пароль: "секрет123",
дата: new Date("2026-01-26"),
имя: "Иван"
};
const безопасный = JSON.stringify(комплексныеДанные, (ключ, значение) => {
// Скрыть пароли
if (ключ === "пароль") return "";
// Форматировать даты
if (значение instanceof Date) return значение.toISOString();
return значение;
}, 2);
console.log(безопасный);
// {
// "пароль": "",
// "дата": "2026-01-26T00:00:00.000Z",
// "имя": "Иван"
// }
// Компактное форматирование для производства
const компактный = JSON.stringify(данные);
console.log(компактный); // {"имя":"Иван","возраст":30}
Python
import json
# Базовое форматирование
данные = {"имя": "Иван", "возраст": 30}
форматированный = json.dumps(
данные,
ensure_ascii=False, # Сохранить кириллицу
indent=2
)
print(форматированный)
# {
# "имя": "Иван",
# "возраст": 30
# }
# Сортировка ключей
отсортированный = json.dumps(
данные,
ensure_ascii=False,
indent=2,
sort_keys=True
)
print(отсортированный)
# Пользовательский разделитель
компактный = json.dumps(данные, ensure_ascii=False, separators=(',', ':'))
print(компактный) # {"имя":"Иван","возраст":30}
# Форматирование с отступами табуляции
с_табами = json.dumps(данные, ensure_ascii=False, indent=' ')
print(с_табами)
# Сохранение в файл с форматированием
with open('данные.json', 'w', encoding='utf-8') as файл:
json.dump(данные, файл, ensure_ascii=False, indent=2)
PHP
<?php
// Базовое форматирование
$данные = [
"имя" => "Иван",
"возраст" => 30,
"город" => "Москва"
];
$форматированный = json_encode(
$данные,
JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE
);
echo $форматированный;
// {
// "имя": "Иван",
// "возраст": 30,
// "город": "Москва"
// }
// Компактный формат
$компактный = json_encode($данные, JSON_UNESCAPED_UNICODE);
echo $компактный; // {"имя":"Иван","возраст":30,"город":"Москва"}
// Без экранирования слэшей
$данные = ["url" => "https://example.com/path"];
$безСлэшей = json_encode(
$данные,
JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES
);
echo $безСлэшей;
// {
// "url": "https://example.com/path"
// }
?>
Java
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.HashMap;
import java.util.Map;
public class JSONFormatter {
public static void main(String[] args) {
// Создание объекта для форматирования
Map<String, Object> данные = new HashMap<>();
данные.put("имя", "Иван");
данные.put("возраст", 30);
данные.put("город", "Москва");
// Форматированный вывод
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.create();
String форматированный = gson.toJson(данные);
System.out.println(форматированный);
// {
// "имя": "Иван",
// "возраст": 30,
// "город": "Москва"
// }
// Компактный вывод
Gson компактныйGson = new Gson();
String компактный = компактныйGson.toJson(данные);
System.out.println(компактный);
}
}
C#
using System;
using System.Text.Json;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Создание данных
var данные = new Dictionary<string, object>
{
{ "имя", "Иван" },
{ "возраст", 30 },
{ "город", "Москва" }
};
// Форматированный вывод
var опции = new JsonSerializerOptions
{
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
string форматированный = JsonSerializer.Serialize(данные, опции);
Console.WriteLine(форматированный);
// {
// "имя": "Иван",
// "возраст": 30,
// "город": "Москва"
// }
// Компактный вывод
string компактный = JsonSerializer.Serialize(данные);
Console.WriteLine(компактный);
}
}
Онлайн инструменты форматирования
1. JSONLint
- URL: jsonlint.com
- Возможности: Валидация и форматирование
- Преимущества: Простой интерфейс, показывает ошибки
2. JSON Formatter & Validator
- URL: jsonformatter.org
- Возможности: Форматирование, валидация, минификация
- Преимущества: Множество опций форматирования
3. Code Beautify JSON Viewer
- URL: codebeautify.org/jsonviewer
- Возможности: Форматирование, древовидный просмотр
- Преимущества: Визуальное представление структуры
Расширения для редакторов кода
Visual Studio Code
Встроенные возможности:1. Открыть JSON файл
Нажать Shift + Alt + F (Windows/Linux) или Shift + Option + F (Mac)
JSON автоматически отформатируется
Настройка форматирования в settings.json:
{
"editor.formatOnSave": true,
"editor.tabSize": 2,
"files.insertFinalNewline": true,
"files.trimTrailingWhitespace": true,
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features",
"editor.formatOnSave": true
}
}
Расширения:
- Prettier - Code formatter
- JSON Tools
- Sort JSON objects
Sublime Text
Пакет: Pretty JSON1. Установить через Package Control
Ctrl/Cmd + Shift + P
"Pretty JSON: Format JSON"
IntelliJ IDEA / WebStorm
1. Открыть JSON файл
Ctrl + Alt + L (Windows/Linux) или Cmd + Option + L (Mac)
Автоматическое форматирование
Командная строка
jq (мощный процессор JSON)
# Форматирование файла
jq '.' неотформатированный.json > отформатированный.json
# Форматирование с сортировкой ключей
jq -S '.' данные.json
# Компактный вывод
jq -c '.' данные.json
# Форматирование из stdin
echo '{"имя":"Иван","возраст":30}' | jq '.'
# Форматирование с фильтром
jq '.пользователи[] | select(.возраст > 25)' данные.json
Python (командная строка)
# Форматирование файла
python -m json.tool неотформатированный.json > отформатированный.json
# С сортировкой ключей
python -m json.tool --sort-keys данные.json
# Форматирование из stdin
echo '{"имя":"Иван"}' | python -m json.tool
Node.js
# Создать скрипт форматирования
node -e "console.log(JSON.stringify(JSON.parse(require('fs').readFileSync('данные.json', 'utf8')), null, 2))" > отформатированный.json
Продвинутые техники форматирования
1. Условное форматирование
function интеллектуальноеФорматирование(данные) {
// Компактный формат для простых объектов
const строка = JSON.stringify(данные);
if (строка.length < 80 && !строка.includes('{', 1)) {
return строка;
}
// Форматированный для сложных
return JSON.stringify(данные, null, 2);
}
const простой = { имя: "Иван", возраст: 30 };
console.log(интеллектуальноеФорматирование(простой));
// {"имя":"Иван","возраст":30}
const сложный = {
пользователь: {
имя: "Иван",
адрес: { город: "Москва" }
}
};
console.log(интеллектуальноеФорматирование(сложный));
// Многострочный формат
2. Пользовательские отступы
function форматироватьСПользовательскимиОтступами(данные, уровень = 0) {
const отступ = ' '.repeat(уровень);
const следующийОтступ = ' '.repeat(уровень + 1);
if (typeof данные !== 'object' || данные === null) {
return JSON.stringify(данные);
}
if (Array.isArray(данные)) {
if (данные.length === 0) return '[]';
const элементы = данные.map(э =>
следующийОтступ + форматироватьСПользовательскимиОтступами(э, уровень + 1)
);
return '[
' + элементы.join(',
') + '
' + отступ + ']';
}
const ключи = Object.keys(данные);
if (ключи.length === 0) return '{}';
const пары = ключи.map(ключ =>
следующийОтступ + '"' + ключ + '": ' +
форматироватьСПользовательскимиОтступами(данные[ключ], уровень + 1)
);
return '{
' + пары.join(',
') + '
' + отступ + '}';
}
const данные = {
пользователь: {
имя: "Иван",
роли: ["admin", "user"]
}
};
console.log(форматироватьСПользовательскимиОтступами(данные));
3. Цветное форматирование для терминала
const цвета = {
сброс: '[0m',
красный: '[31m',
зелёный: '[32m',
жёлтый: '[33m',
синий: '[34m',
пурпурный: '[35m',
голубой: '[36m'
};
function цветнойJSON(данные, отступ = 0) {
const пробел = ' '.repeat(отступ);
if (typeof данные === 'string') {
return цвета.зелёный + '"' + данные + '"' + цвета.сброс;
}
if (typeof данные === 'number') {
return цвета.жёлтый + данные + цвета.сброс;
}
if (typeof данные === 'boolean') {
return цвета.пурпурный + данные + цвета.сброс;
}
if (данные === null) {
return цвета.красный + 'null' + цвета.сброс;
}
if (Array.isArray(данные)) {
const элементы = данные.map(э =>
пробел + ' ' + цветнойJSON(э, отступ + 1)
).join(',
');
return '[
' + элементы + '
' + пробел + ']';
}
const пары = Object.keys(данные).map(ключ =>
пробел + ' ' + цвета.голубой + '"' + ключ + '"' + цвета.сброс +
': ' + цветнойJSON(данные[ключ], отступ + 1)
).join(',
');
return '{
' + пары + '
' + пробел + '}';
}
const данные = {
имя: "Иван",
возраст: 30,
активен: true,
баланс: null
};
console.log(цветнойJSON(данные));
Оптимизация производительности
Когда использовать форматирование
✅ Используйте форматирование для:
- Файлов конфигурации
- Разработки и отладки
- API документации
- Логов для чтения людьми
❌ Избегайте форматирования для:
- API ответов в продакшене
- Хранения в базах данных
- Сетевой передачи данных
- Больших объемов данных
Минификация для продакшена
// Разработка - форматированный
const разработка = JSON.stringify(данные, null, 2);
// Продакшн - минифицированный
const продакшн = JSON.stringify(данные);
// Сравнение размеров
console.log('Форматированный:', разработка.length, 'байт');
console.log('Минифицированный:', продакшн.length, 'байт');
console.log('Экономия:',
((разработка.length - продакшн.length) / разработка.length 100).toFixed(2) + '%'
);
Лучшие практики
1. Согласованность в команде
Создайте файл .editorconfig:
[.json]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
2. Автоматизация
Настройте pre-commit hook для автоматического форматирования:
#!/bin/bash
# .git/hooks/pre-commit
# Форматировать все JSON файлы
for файл in $(git diff --cached --name-only --diff-filter=ACM | grep '.json$'); do
jq '.' "$файл" > "$файл.tmp" && mv "$файл.tmp" "$файл"
git add "$файл"
done
3. Валидация перед форматированием
function безопасноеФорматирование(jsonString) {
try {
const данные = JSON.parse(jsonString);
return {
успех: true,
результат: JSON.stringify(данные, null, 2)
};
} catch (ошибка) {
return {
успех: false,
ошибка: 'Невалидный JSON: ' + ошибка.message
};
}
}
const результат = безопасноеФорматирование('{"имя":"Иван"}');
if (результат.успех) {
console.log(результат.результат);
} else {
console.error(результат.ошибка);
}
Заключение
Правильное форматирование JSON - это не просто эстетика, это важная практика, которая улучшает читаемость, упрощает отладку и повышает продуктивность разработки.
Ключевые выводы:
- Используйте согласованные отступы (2 или 4 пробела)
- Применяйте автоматическое форматирование в редакторах
- Форматируйте для разработки, минифицируйте для продакшена
- Используйте инструменты валидации перед форматированием
- Настройте автоматизацию для поддержания согласованности
Следуя этим рекомендациям и используя подходящие инструменты, вы обеспечите высокое качество и читаемость ваших JSON данных.
Похожие статьи
Файл JSON: Полное руководство по работе с .json файлами
Узнайте всё о файлах JSON: как их создавать, открывать, редактировать и использовать в различных приложениях и языках программирования.
Лучшие инструменты JSON онлайн в 2026 году
Подробный обзор лучших онлайн инструментов для работы с JSON: валидаторы, форматеры, редакторы и конвертеры.
JSON Beautifier: Руководство по красивому форматированию данных
Полное руководство по JSON beautifier инструментам: автоматическое форматирование, настройка стилей, интеграция в workflow и лучшие практики.