← Вернуться к блогу

Как форматировать JSON: Полное руководство

Научитесь правильно форматировать JSON для улучшения читаемости. Инструменты, методы и лучшие практики форматирования JSON.

Big JSON Team11 мин чтенияtools
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

11 мин чтения

# Как форматировать 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 JSON
    1. Установить через 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 цвета = {
    

    сброс: '',

    красный: '',

    зелёный: '',

    жёлтый: '',

    синий: '',

    пурпурный: '',

    голубой: ''

    };

    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 данных.

    Share:

    Похожие статьи

    Read in English