JS метод JSON.stringify()


Загальний опис

JSON.stringify() - це метод, який конвертує значення JavaScript в рядок формату JSON. Цей метод часто використовується при роботі з веб-API, передачі даних між сервером та клієнтом, а також для локального зберігання даних у форматі JSON.

В основному, JSON.stringify() потрібен для перетворення даних у формат, який можна легко передавати і зберігати. Це надзвичайно корисно в сучасних веб-додатках, де передача даних між клієнтом та сервером є постійною.

Основне застосування:

  1. Веб-API: При взаємодії з веб-API, вам часто потрібно буде відправляти дані у форматі JSON. JSON.stringify() дозволяє перетворити об'єкти JavaScript в рядок, який потім можна відправити на сервер.
  2. Локальне зберігання: Якщо ви використовуєте localStorage в браузері для зберігання даних, вам потрібно зберігати ці дані у форматі рядка. За допомогою JSON.stringify() ви можете легко перетворити ваши об'єкти або масиви на рядки для зберігання.

Особливості роботи: Коли ви використовуєте JSON.stringify(), важливо розуміти деякі його особливості:

  1. Функції та undefined: JSON.stringify() автоматично пропускає значення undefined і функції. Наприклад:
let data = {
  name: "John",
  age: 30,
  greet: function() { console.log("Hello!"); }
};
console.log(JSON.stringify(data)); // {"name":"John","age":30}
  1. toJSON: Якщо об'єкт має метод toJSON, JSON.stringify() викликає його, а не конвертує сам об'єкт. Наприклад:
let user = {
  name: "John",
  age: 30,
  toJSON() {
    return {name: this.name};
  }
};
console.log(JSON.stringify(user)); // {"name":"John"}
  1. Простори: Ви можете використовувати третій аргумент для вказівки просторів для форматування виведеного рядка. Це корисно для людського читання:
let user = {name: "John", age: 30};
console.log(JSON.stringify(user, null, 2)); 
/* 
{
  "name": "John",
  "age": 30
}
*/

На відміну від методів, які просто перетворюють об'єкти в рядки (наприклад, метод toString()), JSON.stringify() забезпечує стандартне представлення даних у форматі, яке може бути зрозумілим і іншими системами і мовами програмування.

При використанні JSON.stringify() важливо також розуміти його обмеження. Він не відтворює прототипи, функції, undefined або Symbol. Якщо ви потребуєте серіалізації більш складних структур, розгляньте використання спеціалізованих бібліотек для цього завдання.

автор: Bond

Порада

JSON.stringify() кине помилку, якщо в об'єкті буде циклічне посилання. Для вирішення цієї проблеми можна використовувати бібліотеки сторонніх розробників або самостійно усунути циклічні посилання перед конвертацією.

автор: Bond
Порада

Для того щоб зробити ваш JSON більш читабельним, використовуйте третій параметр у JSON.stringify() - відступи. Це може бути або кількість пробілів, або рядок, який буде використовуватися як відступ.

let obj = {name: "Олена", age: 25};
console.log(JSON.stringify(obj, null, 4));
автор: Bond
Порада

Ви можете використовувати другий параметр JSON.stringify() для вказівки, які ключі потрібно включити в результуючий JSON. Це може бути масивом ключів або функцією, яка дозволяє вам маніпулювати значеннями.

let obj = {name: "Микола", age: 30, job: "інженер"};
console.log(JSON.stringify(obj, ['name', 'job']));  // {"name":"Микола","job":"інженер"}
автор: Bond
Порада

Якщо у вас є об'єкт, який потребує специфічної серіалізації, можна додати метод toJSON() до цього об'єкта. JSON.stringify() автоматично викличе цей метод під час серіалізації об'єкта.

let date = new Date();
date.toJSON = function() {
    return 'Сьогоднішня дата!';
};
console.log(JSON.stringify(date));  // "Сьогоднішня дата!"
автор: Bond

Синтаксис

JSON.stringify(value)
JSON.stringify(value, replacer)
JSON.stringify(value, replacer, space)

Параметри

value

Значення, яке потрібно конвертувати у рядок JSON. Це може бути будь-який об'єкт або примітив.

автор: Bond

replacer

Функція, яка змінює процес конвертації в рядок, або масив рядків та чисел, що вказують властивості значення, які мають бути включені у вивід.

Якщо replacer є масивом, всі елементи у цьому масиві, які не є рядками або числами (або примітивами, або об'єктами-обгортками), включаючи значення Symbol, повністю ігноруються. Якщо replacer є будь-чим іншим, ніж функція або масив (наприклад, null або не наданий), всі властивості об'єкта з рядковими ключами включаються в результуючий рядок JSON.

автор: Bond

space

Рядок або число, яке використовується для вставки пробілів (включаючи відступи, символи переведення рядка тощо) в результуючий рядок JSON з метою покращення читабельності.

автор: Bond

Повернення

string

Повертає рядок JSON, що представляє задане значення, або undefined, якщо значення не може бути конвертоване у відповідний рядок JSON.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
3 3.5 4 10.5 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
37 18 4 4
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.10.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

Тут ми маємо об'єкт order, який представляє замовлення користувача. Ми хочемо відправити це замовлення на сервер. Для відправлення даних на сервер у форматі JSON, ми можемо використовувати метод fetch для здійснення HTTP-запиту. Але перед відправленням, нам потрібно перетворити наш об'єкт замовлення на рядок JSON за допомогою методу JSON.stringify(). У заголовках ми вказуємо, що тип вмісту нашого тіла запиту є "application/json". Після успішного отримання відповіді від сервера, ми можемо обробити дані як звичайний об'єкт JavaScript.

// Створення об'єкта замовлення
let order = {
    productId: 12345,
    quantity: 3,
};

// Відправлення об'єкта замовлення на сервер у форматі JSON
fetch('/api/placeOrder', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify(order),
})
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.log('Сервер недоступний:', error.message));

console.log('Надіслано JSON:', JSON.stringify(order));
автор: Bond

Цей приклад демонструє, як можна використовувати JSON.stringify() для перетворення об'єкту JavaScript у рядок JSON. За допомогою чекбокса користувач може обрати, чи хоче він виводити JSON у "красивому" форматі, із відступами, або ж у стандартному, мінімалістичному вигляді.

автор: Bond

У цьому прикладі ми створюємо об'єкт user з інформацією про користувача. Щоб зберегти цей об'єкт у localStorage браузера, нам потрібно перетворити об'єкт на рядок формату JSON за допомогою методу JSON.stringify(). Після зберігання, ми можемо отримати цю інформацію назад із localStorage, але перед тим, як використовувати її як об'єкт JavaScript, нам потрібно конвертувати рядок назад у об'єкт за допомогою JSON.parse().

// Створення об'єкта користувача
let user = {
    name: "Олександр",
    age: 25,
    isSubscribed: true
};

// Зберігання об'єкта користувача в localStorage у форматі JSON
localStorage.setItem('userInfo', JSON.stringify(user));

// Отримання об'єкта користувача з localStorage та конвертація назад у об'єкт
let retrievedUser = JSON.parse(localStorage.getItem('userInfo'));
console.log(retrievedUser); // { name: "Олександр", age: 25, isSubscribed: true }
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід