PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    JSON: методы, ограничения, примеры использования.

    JSON: методы, ограничения, примеры использования.

    Аватар автора JSON:  методы, ограничения, примеры использования.

    Валерий Шестернин

    Иконка календаря26 августа 2023

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

    Синтаксис JSON и примеры использования

    JSON (JavaScript Object Notation) очень похож на буквенный синтаксис объекта JavaScript с тем лишь отличием, что имена свойств всегда заключены в двойные кавычки, и не используются другие виды кавычек (одинарные, обратные). Кроме того данные в формате JSON нельзя сразу использовать в JavaScript. Для работы с ними у глобального объекта JSON существует два метода: JSON.stringify(), который при базовом использовании принимает данные с типом Object, Array, Number, String, Boolean и Null, после чего преобразует их в JSON строку и JSON.parse(), который преобразует данные из JSON.

    const myArr = [{ first: 1 }, { second: 2 }];
    const myObj = {
      myArr: myArr,
      myNum: 1,
      myStr: "Hello!",
      myBoolean: false,
    };
    const myJSON = JSON.stringify(myObj);
    //{"myArr":[{"first":1},{"second":2}],"myNum":1,"myStr":"Hello!","myBoolean":false}
    console.log(typeof myJSON); //string
    const parsedObj = JSON.parse(myJSON);
    //получаем исходный объект со всеми вложениями
    console.log(typeof parsedObj);//object
    

    1 JSON.png

    Перевод данных в формат JSON и обратно используется не только для передачи данных по сети, но и для клонирования ссылочных типов данных. В нашем примере свойство myArr объекта parsedObj не будет ссылаться на объявленный в первой строке массив, а создаст его независимую копию.

    Ограничения формата JSON и как их обойти

    При описании метода JSON.stringify() я не просто так перечислил поддерживаемые типы данных. Дело в том, что JSON не умеет работать с типами Date, BigInt, Map и остальными, не попавшими в описаный список. Что бы преобразовать такие данные в JSON строку необходимо привести их к поддерживаемому типу. Сделать это можно прямо внутри метода, передав в него необязательным параметром функцию, которая принимает все пары ключ-значение и преобразует их по ходу работы метода.

    const myObj = {
      bigInt: 123n,
      date: new Date("2023-08-27"),
    };
    console.log(JSON.stringify(myObj));//выдаст ошибку
    //TypeError: Do not know how to serialize a BigInt
    
    const replacer = (key, value) => {
      if (typeof value === "bigint") {
        return Number(value);
      }//проверяем тип значения 
      if (key === "date") {
        return value.toString();
      }//или ключ
      return value;//остальные значения просто возвращаем
    };
    const replacedObj = JSON.stringify(myObj, replacer);
    //{"bigInt":123,"date":"2023-08-27T00:00:00.000Z"}
    

    2 bigint.png

    Кроме того JSON.stringify() не может работать с циклическими зависимостями. Что бы исключить из сериализации значения с такими зависимостями или если вам нужно преобразовать в JSON формат только часть объекта, можно вместо функции передать вторым параметром массив ключей и в результате метод вернет строку, содержащую только пары ключ-значение с этими ключами.

    const person = { name: "John", age: "22" };
    const company = { name: "Company", employers: [person] }; //company ссылается на person
    person.company = company; //person ссылается на company
    
    console.log(JSON.stringify(person));
    //TypeError: Converting circular structure to JSON
    const safetyProperties = Object.keys(person).filter(
      (elem) => elem !== "company"
    ); //создаем массив "безопасных" ключей
    console.log(JSON.stringify(person, safetyProperties)); //{"name":"John","age":"22"}
    

    3 circular.png

    Дополнительные возможности JSON.

    Метод parse() глобального объекта JSON тоже принимает дополнительным параметром функцию, которая по аналогии с JSON.stringify() обработает каждую пару ключ-значение при парсинге строки.

    const JSONdata = JSON.stringify({ name: "john", age: 22 });
    const capitalizeName = (key, value) => {
      if (key === "name") {
        capitalizedName = value.replace(value[0], value[0].toUpperCase());
        return capitalizedName;
      } //если ключ - name возвращаем имя с заглавной буквой в начале
      return value; //остальные значения просто возвращаем как есть
    };
    console.log(JSON.parse(JSONdata, capitalizeName)); //{ name: 'John', age: 22 }
    //заменить функцию на массив ключей, как в JSON.stringify не получится
    console.log(JSON.parse(JSONdata, ["name"])); //{ name: 'john', age: 22 }
    

    4 parse.png

    Кроме функции обработки пар ключ-значение, метод JSON.stringify() может принимать еще одним параметром вид отступов для более удобного при чтении форматирования получаемой строки. Важно помнить, что это третий параметр метода и если функция или массив не переданы вторым параметром - нужно указать вместо них null.

    const myObj = { name: "John", age: 22 };
    console.log(JSON.stringify(myObj, null, 4));
    // {
    //     "name": "John",
    //     "age": 22
    // }
    console.log(JSON.stringify(myObj, null, 10));
    // {
    //           "name": "John",
    //           "age": 22
    // }
    //если не передавать null или второй параметр
    //форматирование останется стандартным
    console.log(JSON.stringify(myObj, 10)); 
    //{"name":"John","age":22}
    

    5 space.png

    Мы уже знаем что при вызове JSON.stringify() можно указать массив ключей или функцию, которая обработает все пары ключ-значение, но мы так же можем изменить поведение этого метода при описании объекта, который будет в него передаваться. Для этого нужно добавить такому объекту свойство toJSON и описать в нем функцию, возвращающую нужное нам значение. Таким образом можно “скрыть” для JSON.stringify() приватные данные или вовсе передавать значения полностью отличные от содержимого объекта.

    const user = {
      name: "John",
      age: 22,
      password: "password",
      toJSON() {
        return { name: this.name, age: this.age };
      },//перечисляем свойства которые хотим передавать
    };
    console.log(JSON.stringify(user, null, 2));
    // {
    //     "name": "John",
    //     "age": 22
    //   }
    

    6 toJSON.png

    Заключение

    Работа с данными формата JSON и методами одноименного глобального объекта в JavaScript давно стала неотъемлемой частью разработки веб приложений поэтому навыки взаимодействия с ними необходимы каждому разработчику.

    Иконка глаза7 410

    Комментарии

    0

    Постройте личный план изучения Основы разработки до уровня Middle — бесплатно!

    Основы разработки — часть карты развития Frontend, Backend, Mobile

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Основы Git

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    CSS Flexbox

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    бесплатно
    Подробнее

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

    Картинка поста PostgreSQL vs MySQL: что выбрать для проекта
    Иконка аватараАнтон
    Иконка календаря13 августа 2026
    PostgreSQLMySQLбазы данных+ 3middleИконка уровня middle

    PostgreSQL vs MySQL: что выбрать для проекта

    PostgreSQL vs MySQL — сравниваем архитектуру, производительность, типы данных и транзакции, чтобы выбрать подходящую БД для вашего проекта.

    Иконка чипа0
    Иконка глаза188
    Иконка комментариев0
    Картинка поста Регулярные выражения в JavaScript: полное руководство
    Иконка аватараАнтон
    Иконка календаря06 августа 2026
    JavaScriptрегулярные выраженияregexp+ 2middleИконка уровня middle

    Регулярные выражения в JavaScript: полное руководство

    Регулярные выражения в JavaScript позволяют искать, проверять и заменять текст по шаблону. Разбираем синтаксис, методы и частые ошибки с примерами.

    Иконка чипа0
    Иконка глаза364
    Иконка комментариев0
    Картинка поста React useState и useEffect: полное руководство 2024
    Иконка аватараАнтон
    Иконка календаря29 июля 2026
    ReactuseStateuseEffect+ 3juniorИконка уровня junior

    React useState и useEffect: полное руководство 2024

    Разбираем useState и useEffect с нуля: как управлять состоянием и побочными эффектами в React-компонентах с реальными примерами.

    Иконка чипа0
    Иконка глаза927
    Иконка комментариев0
    Иконка чипа0