Преобразование типов (Массивы и Объекты) через JSON
Преобразование типов между объектами/массивами и строками — это основа для хранения и передачи данных в приложении. В JavaScript для этого используются два метода: JSON.stringify() и JSON.parse().
JSON.stringify()
Превращает объект или массив в строку в формате JSON — текстовом формате, понятном и серверам, и клиентам.
Про сам формат мы прочтем в следующей теме.
const user = {
name: 'Анна',
age: 28,
isAdmin: false,
tasks: ['Почитать', 'Написать код']
};
const jsonString = JSON.stringify(user);
console.log(jsonString);
// '{"name":"Анна","age":28,"isAdmin":false,"tasks":["Почитать","Написать код"]}'
Важно:
JSON.stringify()не работает с функциями,undefined,SymbolиMap/Set. Они будут проигнорированы или заменены наnull.
Пример с игнорированием:
const obj = {
name: 'Иван',
func: function() { return 'test'; },
secret: undefined
};
console.log(JSON.stringify(obj));
// '{"name":"Иван"}' — функция и undefined пропущены
JSON.parse()
Превращает строку в формате JSON обратно в объект или массив.
const json = '{"name":"Анна","age":28,"isAdmin":false}';
const user = JSON.parse(json);
console.log(user.name); // "Анна"
console.log(user.age); // 28
console.log(typeof user); // "object"
Если строка не является корректным JSON — будет ошибка
SyntaxError.
Пример ошибки:
JSON.parse('{name: "Иван"}'); // Ошибка! Ключи должны быть в кавычках
JSON.parse('{"name": "Иван"'); // Ошибка! Нет закрывающей скобки
Использование при работе с API
При запросах к серверу (через fetch, axios и т.д.) данные приходят в виде строки в формате JSON. Чтобы работать с ними как с объектами — нужно их распарсить.
fetch('/api/user')
.then(response => response.json()) // автоматически вызывает JSON.parse()
.then(user => {
console.log(user.name); // теперь можно работать как с объектом
});
Также при сохранении данных в localStorage — они должны быть строками:
const tasks = [{ title: 'Убраться', completed: false }];
// Сохраняем
localStorage.setItem('tasks', JSON.stringify(tasks));
// Загружаем
const saved = localStorage.getItem('tasks');
const tasksList = JSON.parse(saved);
console.log(tasksList[0].title); // "Убраться"
Всегда используйте
JSON.stringify()перед сохранением объектов вlocalStorageили отправкой на сервер.
Всегда используйтеJSON.parse()после получения строки изlocalStorageили ответа API.