hellojs.ru
Главная - Продвинутый JavaScript - JSON формат передачи данных, глубокое клонирование объектов

JSON формат передачи данных, глубокое клонирование объектов

Размещено в категории "Продвинутый JavaScript"
24.11.2024 / просмотров: 4 / комментариев: 0
Ресурсы:

HTTP
JSON



JSON (JavaScript Object Notation) является текстовым форматом обмена данных и используется не только для передачи, но и для хранения данных.

JSON это набор пар "ключ - значение", как и в объекте. Здесь правило такое, что все строки обязательно должны быть в двойных кавычках.

В качестве значений могут быть объекты, массивы, числа, строки, логические значения или null.

Будем разбирать на практике, допустим у нас есть какой-то объект persone

Код

const persone = {
  name: 'Alex',
  phone: '+74444444444'
}

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

Все современные браузеры имеют встроенные объекты json для работы с этими данными и в этом встроенном объекте есть свои свойства и методы.

Метод stringify возвращает JavaScript-значение, преобразованное в JSON-строку.

Посмотрим как это работает с нашим объектом:

Код

console.log(JSON.stringify(persone));

Цитата

{"name":"Alex","phone":"+74444444444"}

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

Рассмотрим обратную ситуацию, когда нам с сервера приходят данные в формате json, и нам нужно, к примеру, превратить их в обычный объект в нашем скрипте.

Метод parse разбирает строку JSON, возможно с преобразованием получаемого в процессе разбора значения.

Опять же на примере нашего объекта проводим обратную операцию преобразования:

Код

console.log(JSON.parse(JSON.stringify(persone)));

И в консоли мы уже увидим обычный объект:

Цитата

{ name: 'Alex', phone: '+74444444444' }

До появления json использовался «расширяемый язык разметки» xml. Вот как выглядел бы наш объект в этом формате:

Код

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <name>Alex</name>
  <phone>+74444444444</phone>
</root>

Эта структура будет в итоге больше весить, она менее понята и более громоздкая.

Глубокое клонирование объектов с помощью JSON


Для наглядности сделаем наш объект чуть более вложенным, чтобы можно было делать глубокое копирование:

Код

'use strict';

const persone = {
  name: 'Alex',
  phone: '+74444444444',
  parents: {
  mom: 'Olga',
  dad: 'Mike'
  }
}

И если нам нужно сделать его глубокую копию, как раз и пригодится такая конструкция:

Код

const clone = JSON.parse(JSON.stringify(persone));

Вот эта операция превратит наш объект в формат json:

Код

JSON.stringify(persone)

А вот эта распарсит его обратно в объект, это будет глубокая копия нашего первоначального объекта, которая своершенно будет от него независимой:

Код

JSON.parse(JSON.stringify(persone))

И мы в этом можем убедиться, если попробуем поменять какие-то из вложенных значений:

Код

clone.parents.mom = 'Ann';

console.log(clone);
console.log(persone);

Цитата

{
name: 'Alex',
phone: '+74444444444',
parents: { mom: 'Ann', dad: 'Mike' }
}
{
name: 'Alex',
phone: '+74444444444',
parents: { mom: 'Olga', dad: 'Mike' }
}

И мы видим, что в первоначальном объекте ничего не поменялось, тогда как в его копии изменилось значение свойства mom вложенного объекта.
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
Сайт управляется системой uCoz