Сериализация - это процесс преобразования данных в формат, который может быть записан на диск или передан по сети (или написан на бумаге, если это то, что вы хотите). Обычно сериализация преобразует объекты в текст, но это необязательно, так как существует несколько форматов сериализации, таких как bencoding bittorrent, а форматы старого/древнего стандарта asn.1 являются двоичными.
JSON - это одна из форм текстового формата сериализации и в настоящее время очень популярна благодаря своей простоте. Но это не единственный. Другие популярные форматы включают XML и CSV.
Из-за своей популярности и его происхождения в качестве символьного синтаксиса объекта javascript ES5 введено JSON.stringify()
для генерации строки JSON из объекта. Раньше вам приходилось использовать библиотеки или писать парсер для рекурсивного спуска, чтобы выполнить эту работу.
Итак, есть JSON.stringify()
достаточно для сериализации? Да, если желаемый формат вывода - JSON. Нет, если вы хотите использовать другие форматы вывода, такие как XML или CSV или bencode.
Существуют ограничения для формата JSON. Одним из ограничений является то, что JSON не может кодировать функции, поэтому JSON.stringify()
игнорирует функции/методы при сериализации. JSON также не может кодировать циклические ссылки. В большинстве других форматов сериализации также есть это ограничение, но поскольку JSON выглядит, как и синтаксис javascript, некоторые люди предполагают, что он может делать то, что могут представлять собой литералы объектов javascript. Это невозможно.
Таким образом, отношения между «JSON» и «сериализация» похожи на отношения между «Toyota Prius» и «автомобилем». JSON.stringify()
- это просто функция, которая генерирует строки JSON, поэтому я предполагаю, что это станет фабрикой Toyota.
Я мог бы добавить, что JSON предназначен для представления _subset_ объекта JavaScript, и, кроме своей собственной своеобразной нотации (не столь гибки, как литеральный объект JavaScript), не включает функциональные свойства, методы AKA. – Manngo