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

Файл JSON: Полное руководство по работе с .json файлами

Узнайте всё о файлах JSON: как их создавать, открывать, редактировать и использовать в различных приложениях и языках программирования.

Big JSON Team12 мин чтенияbeginner
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.

12 мин чтения

# Файл JSON: Полное руководство по работе с .json файлами

Файлы JSON (.json) стали неотъемлемой частью современной разработки программного обеспечения. Они используются для хранения конфигураций, обмена данными между приложениями и структурирования информации. В этом подробном руководстве мы рассмотрим всё, что нужно знать о файлах JSON.

Что такое файл JSON?

Файл JSON - это текстовый файл с расширением .json, который содержит данные в формате JavaScript Object Notation. Эти файлы используют стандартный текстовый формат, что делает их читаемыми как для человека, так и для машины.

Основные характеристики

  • Расширение: .json
  • MIME-тип: application/json
  • Кодировка: UTF-8 (рекомендуется)
  • Формат: Текстовый, структурированный

Структура файла JSON

Простой пример

Создадим файл config.json:

{

"appName": "Мое приложение",

"version": "1.0.0",

"language": "ru",

"debug": false

}

Сложная структура

Файл users.json с более сложной структурой:

{

"users": [

{

"id": 1,

"name": "Анна Иванова",

"email": "anna@example.com",

"roles": ["admin", "editor"],

"settings": {

"theme": "dark",

"notifications": true,

"language": "ru"

},

"createdAt": "2025-01-15T10:30:00Z"

},

{

"id": 2,

"name": "Петр Смирнов",

"email": "petr@example.com",

"roles": ["user"],

"settings": {

"theme": "light",

"notifications": false,

"language": "ru"

},

"createdAt": "2025-02-20T14:45:00Z"

}

],

"totalCount": 2,

"lastUpdated": "2026-01-26T12:00:00Z"

}

Как создать файл JSON

Метод 1: Использование текстового редактора

  • Откройте любой текстовый редактор (Notepad++, VS Code, Sublime Text)
  • Напишите корректный JSON-код
  • Сохраните файл с расширением .json
  • Пример простого файла product.json:

    {
    

    "id": 12345,

    "name": "Ноутбук ASUS",

    "price": 75000,

    "currency": "RUB",

    "available": true,

    "categories": ["Электроника", "Компьютеры"],

    "specifications": {

    "brand": "ASUS",

    "model": "ROG Strix G15",

    "processor": "AMD Ryzen 7",

    "ram": "16GB",

    "storage": "512GB SSD"

    }

    }

    Метод 2: Программное создание

    JavaScript/Node.js

    const fs = require('fs');
    
    

    const data = {

    name: "Иван",

    age: 30,

    city: "Москва"

    };

    // Запись в файл

    fs.writeFileSync('user.json', JSON.stringify(data, null, 2));

    console.log('Файл создан успешно!');

    Python

    import json
    
    

    data = {

    "name": "Иван",

    "age": 30,

    "city": "Москва"

    }

    # Запись в файл

    with open('user.json', 'w', encoding='utf-8') as f:

    json.dump(data, f, ensure_ascii=False, indent=2)

    print("Файл создан успешно!")

    C#

    using System;
    

    using System.IO;

    using System.Text.Json;

    var data = new {

    Name = "Иван",

    Age = 30,

    City = "Москва"

    };

    string jsonString = JsonSerializer.Serialize(data, new JsonSerializerOptions {

    WriteIndented = true,

    Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping

    });

    File.WriteAllText("user.json", jsonString);

    Console.WriteLine("Файл создан успешно!");

    Как открыть файл JSON

    Способ 1: Текстовые редакторы

    Рекомендуемые редакторы:
  • Visual Studio Code - лучший выбор с подсветкой синтаксиса, валидацией и автоформатированием
  • Notepad++ - легкий и быстрый
  • Sublime Text - отлично работает с большими файлами
  • Atom - гибкая настройка
  • Способ 2: Веб-браузеры

    Современные браузеры могут отображать JSON-файлы:

  • Перетащите файл .json в браузер
  • Или откройте через File → Open
  • Браузеры с лучшей поддержкой:
    • Google Chrome (с расширением JSON Formatter)
    • Mozilla Firefox (встроенный просмотр)
    • Microsoft Edge

    Способ 3: Онлайн-инструменты

    • JSONLint - валидация и форматирование
    • JSON Editor Online - визуальное редактирование
    • JSON Formatter - красивое отображение
    • Big JSON - для больших файлов

    Способ 4: Программное чтение

    JavaScript/Node.js

    const fs = require('fs');
    
    

    // Синхронное чтение

    const data = JSON.parse(fs.readFileSync('config.json', 'utf8'));

    console.log(data);

    // Асинхронное чтение

    fs.readFile('config.json', 'utf8', (err, data) => {

    if (err) {

    console.error('Ошибка чтения файла:', err);

    return;

    }

    const jsonData = JSON.parse(data);

    console.log(jsonData);

    });

    Python

    import json
    
    

    # Чтение файла

    with open('config.json', 'r', encoding='utf-8') as f:

    data = json.load(f)

    print(data)

    Java

    import com.google.gson.Gson;
    

    import java.io.FileReader;

    public class ReadJSON {

    public static void main(String[] args) {

    try {

    Gson gson = new Gson();

    FileReader reader = new FileReader("config.json");

    Config config = gson.fromJson(reader, Config.class);

    System.out.println(config);

    reader.close();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    Редактирование файлов JSON

    Лучшие практики редактирования

  • Используйте редактор с подсветкой синтаксиса
  • Включите автоматическую валидацию
  • Делайте резервные копии перед изменениями
  • Используйте форматирование для читаемости
  • Проверяйте JSON после редактирования
  • Пример редактирования в VS Code

  • Откройте файл в VS Code
  • Используйте Shift + Alt + F для форматирования
  • VS Code автоматически подсветит ошибки
  • Используйте автодополнение для ключей
  • Программное редактирование

    Обновление значения

    const fs = require('fs');
    
    

    // Чтение

    let config = JSON.parse(fs.readFileSync('config.json', 'utf8'));

    // Изменение

    config.version = "2.0.0";

    config.lastModified = new Date().toISOString();

    // Запись

    fs.writeFileSync('config.json', JSON.stringify(config, null, 2));

    Добавление нового поля

    import json
    
    

    # Чтение

    with open('config.json', 'r', encoding='utf-8') as f:

    config = json.load(f)

    # Добавление нового поля

    config['newFeature'] = True

    config['features'] = ['feature1', 'feature2']

    # Запись

    with open('config.json', 'w', encoding='utf-8') as f:

    json.dump(config, f, ensure_ascii=False, indent=2)

    Распространенные использования файлов JSON

    1. Конфигурационные файлы

    package.json (Node.js)

    {
    

    "name": "my-app",

    "version": "1.0.0",

    "description": "Моё приложение",

    "main": "index.js",

    "scripts": {

    "start": "node index.js",

    "test": "jest",

    "build": "webpack"

    },

    "dependencies": {

    "express": "^4.18.0",

    "mongoose": "^7.0.0"

    },

    "devDependencies": {

    "jest": "^29.0.0",

    "webpack": "^5.75.0"

    },

    "keywords": ["javascript", "nodejs"],

    "author": "Ваше имя",

    "license": "MIT"

    }

    tsconfig.json (TypeScript)

    {
    

    "compilerOptions": {

    "target": "ES2020",

    "module": "commonjs",

    "lib": ["ES2020"],

    "outDir": "./dist",

    "rootDir": "./src",

    "strict": true,

    "esModuleInterop": true,

    "skipLibCheck": true,

    "forceConsistentCasingInFileNames": true,

    "resolveJsonModule": true,

    "declaration": true,

    "sourceMap": true

    },

    "include": ["src/*/"],

    "exclude": ["node_modules", "dist"]

    }

    2. Данные приложения

    База данных задач

    {
    

    "tasks": [

    {

    "id": 1,

    "title": "Написать отчет",

    "description": "Подготовить ежемесячный отчет",

    "status": "in-progress",

    "priority": "high",

    "assignee": "Иван Иванов",

    "dueDate": "2026-01-30",

    "tags": ["отчет", "важное"],

    "createdAt": "2026-01-20T09:00:00Z",

    "updatedAt": "2026-01-26T14:30:00Z"

    },

    {

    "id": 2,

    "title": "Проверить email",

    "description": "Ответить на письма клиентов",

    "status": "completed",

    "priority": "medium",

    "assignee": "Мария Петрова",

    "dueDate": "2026-01-25",

    "tags": ["коммуникация"],

    "createdAt": "2026-01-23T10:00:00Z",

    "updatedAt": "2026-01-25T16:00:00Z"

    }

    ],

    "metadata": {

    "totalTasks": 2,

    "completedTasks": 1,

    "lastSync": "2026-01-26T15:00:00Z"

    }

    }

    3. Локализация

    ru.json (Русский язык)

    {
    

    "common": {

    "welcome": "Добро пожаловать",

    "goodbye": "До свидания",

    "yes": "Да",

    "no": "Нет",

    "save": "Сохранить",

    "cancel": "Отмена",

    "delete": "Удалить",

    "edit": "Редактировать"

    },

    "errors": {

    "required": "Это поле обязательно",

    "invalidEmail": "Некорректный email",

    "passwordTooShort": "Пароль должен содержать минимум 8 символов",

    "serverError": "Ошибка сервера. Попробуйте позже"

    },

    "navigation": {

    "home": "Главная",

    "about": "О нас",

    "contact": "Контакты",

    "profile": "Профиль"

    }

    }

    4. API-ответы

    Ответ REST API

    {
    

    "status": "success",

    "code": 200,

    "message": "Данные получены успешно",

    "data": {

    "user": {

    "id": 12345,

    "username": "ivan_petrov",

    "email": "ivan@example.com",

    "profile": {

    "firstName": "Иван",

    "lastName": "Петров",

    "avatar": "https://example.com/avatars/12345.jpg",

    "bio": "Разработчик программного обеспечения"

    },

    "stats": {

    "posts": 42,

    "followers": 1523,

    "following": 235

    }

    }

    },

    "timestamp": "2026-01-26T15:30:00Z",

    "requestId": "req_abc123xyz"

    }

    Работа с большими файлами JSON

    Проблемы с большими файлами

    • Медленная загрузка в память
    • Трудно редактировать в обычных редакторах
    • Длительное время парсинга

    Решения

    1. Потоковая обработка (Node.js)

    const fs = require('fs');
    

    const JSONStream = require('JSONStream');

    const stream = fs.createReadStream('large-file.json');

    const parser = JSONStream.parse('users.');

    stream.pipe(parser);

    parser.on('data', (user) => {

    console.log('Обработка пользователя:', user.name);

    // Обработка каждого пользователя по отдельности

    });

    parser.on('end', () => {

    console.log('Обработка завершена');

    });

    2. Разбиение на части

    const fs = require('fs');
    
    

    // Чтение большого файла порциями

    const data = JSON.parse(fs.readFileSync('large-file.json', 'utf8'));

    // Разбиение на меньшие файлы

    const chunkSize = 1000;

    const users = data.users;

    for (let i = 0; i < users.length; i += chunkSize) {

    const chunk = users.slice(i, i + chunkSize);

    const filename = users-chunk-${Math.floor(i / chunkSize)}.json;

    fs.writeFileSync(filename, JSON.stringify(chunk, null, 2));

    }

    3. Использование специализированных инструментов

    • jq - командная строка для обработки JSON
    • Big JSON Viewer - для просмотра больших файлов
    • JSON Editor - с поддержкой больших файлов

    Пример использования jq

    # Извлечь только имена пользователей
    

    jq '.users[].name' large-file.json

    # Фильтрация по условию

    jq '.users[] | select(.age > 25)' large-file.json

    # Подсчет элементов

    jq '.users | length' large-file.json

    Валидация файлов JSON

    Онлайн-валидаторы

  • JSONLint - проверка синтаксиса
  • JSON Schema Validator - валидация по схеме
  • JSON Formatter - проверка и форматирование
  • Программная валидация

    JavaScript

    function isValidJSON(str) {
    

    try {

    JSON.parse(str);

    return true;

    } catch (e) {

    return false;

    }

    }

    const content = fs.readFileSync('data.json', 'utf8');

    if (isValidJSON(content)) {

    console.log('JSON корректен');

    } else {

    console.log('JSON содержит ошибки');

    }

    Python

    import json
    
    

    def is_valid_json(filepath):

    try:

    with open(filepath, 'r', encoding='utf-8') as f:

    json.load(f)

    return True

    except json.JSONDecodeError as e:

    print(f"Ошибка: {e}")

    return False

    except FileNotFoundError:

    print("Файл не найден")

    return False

    if is_valid_json('data.json'):

    print("JSON корректен")

    else:

    print("JSON содержит ошибки")

    Валидация по схеме

    const Ajv = require('ajv');
    

    const ajv = new Ajv();

    const schema = {

    type: "object",

    properties: {

    name: { type: "string" },

    age: { type: "number", minimum: 0 },

    email: { type: "string", format: "email" }

    },

    required: ["name", "email"]

    };

    const data = {

    name: "Иван",

    age: 30,

    email: "ivan@example.com"

    };

    const validate = ajv.compile(schema);

    const valid = validate(data);

    if (valid) {

    console.log('Данные соответствуют схеме');

    } else {

    console.log('Ошибки валидации:', validate.errors);

    }

    Безопасность файлов JSON

    1. Не храните конфиденциальные данные в открытом виде

    Плохо:

    {
    

    "database": {

    "host": "localhost",

    "username": "admin",

    "password": "password123"

    }

    }

    Хорошо:

    {
    

    "database": {

    "host": "localhost",

    "credentialsFile": "/secure/db-credentials.encrypted"

    }

    }

    2. Используйте переменные окружения

    // config.json - только структура  
    

    {

    "database": {

    "host": "${DB_HOST}",

    "port": "${DB_PORT}"

    }

    }

    // Загрузка с подстановкой

    const config = JSON.parse(

    fs.readFileSync('config.json', 'utf8')

    .replace(/${(w+)}/g, (_, key) => process.env[key])

    );

    3. Валидация входных данных

    function sanitizeJSON(data) {
    

    // Удаление потенциально опасных полей

    const sanitized = { ...data };

    delete sanitized.__proto__;

    delete sanitized.constructor;

    return sanitized;

    }

    4. Ограничение размера файла

    const MAX_SIZE = 10  1024  1024; // 10 MB
    
    

    function readJSONSafely(filepath) {

    const stats = fs.statSync(filepath);

    if (stats.size > MAX_SIZE) {

    throw new Error('Файл слишком большой');

    }

    return JSON.parse(fs.readFileSync(filepath, 'utf8'));

    }

    Оптимизация файлов JSON

    1. Минификация

    // Обычный JSON (читаемый)
    

    const readable = JSON.stringify(data, null, 2);

    // Минифицированный JSON (компактный)

    const minified = JSON.stringify(data);

    console.log('Читаемый размер:', readable.length);

    console.log('Минифицированный размер:', minified.length);

    2. Сжатие

    const zlib = require('zlib');
    

    const fs = require('fs');

    const data = { / большой объект */ };

    const jsonString = JSON.stringify(data);

    // Сжатие GZIP

    zlib.gzip(jsonString, (err, compressed) => {

    if (err) throw err;

    fs.writeFileSync('data.json.gz', compressed);

    console.log('Исходный размер:', jsonString.length);

    console.log('Сжатый размер:', compressed.length);

    });

    3. Удаление избыточности

    Избыточный JSON:

    {
    

    "users": [

    {

    "id": 1,

    "firstName": "Иван",

    "lastName": "Петров",

    "country": "Россия"

    },

    {

    "id": 2,

    "firstName": "Мария",

    "lastName": "Сидорова",

    "country": "Россия"

    }

    ]

    }

    Оптимизированный JSON:

    {
    

    "country": "Россия",

    "users": [

    {

    "id": 1,

    "firstName": "Иван",

    "lastName": "Петров"

    },

    {

    "id": 2,

    "firstName": "Мария",

    "lastName": "Сидорова"

    }

    ]

    }

    Распространенные ошибки

    1. Запятая после последнего элемента

    Неправильно:

    {
    

    "name": "Иван",

    "age": 30,

    }

    Правильно:

    {
    

    "name": "Иван",

    "age": 30

    }

    2. Одинарные кавычки

    Неправильно:

    {
    

    'name': 'Иван'

    }

    Правильно:

    {
    

    "name": "Иван"

    }

    3. Неэкранированные спецсимволы

    Неправильно:

    {
    

    "path": "C:UsersIvan"

    }

    Правильно:

    {
    

    "path": "C:\Users\Ivan"

    }

    Инструменты командной строки

    jq - Процессор JSON

    # Красивый вывод
    

    cat data.json | jq .

    # Извлечение значения

    jq '.users[0].name' data.json

    # Фильтрация

    jq '.users[] | select(.age > 25)' data.json

    # Преобразование

    jq '.users | map({name, email})' data.json

    json-server - Фейковый REST API

    # Установка
    

    npm install -g json-server

    # Запуск сервера из db.json

    json-server --watch db.json --port 3000

    Заключение

    Файлы JSON - это мощный и гибкий способ хранения и обмена данными. Понимание того, как создавать, читать, редактировать и оптимизировать JSON-файлы, является важным навыком для любого разработчика.

    Ключевые моменты:

    • JSON-файлы просты в создании и редактировании
    • Множество инструментов доступно для работы с JSON
    • Всегда валидируйте JSON перед использованием
    • Соблюдайте лучшие практики безопасности
    • Оптимизируйте большие файлы для лучшей производительности

    Практикуйтесь с реальными файлами JSON, экспериментируйте с различными инструментами, и вскоре работа с JSON-файлами станет для вас второй натурой.

    Share:

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

    Read in English