2015-05-05 2 views
8

Является ли JSON.stringify() эквивалентным сериализации или эффективной сериализации или это всего лишь необходимый шаг к сериализации ?JSON.stringify по сравнению с сериализацией

Является ли JSON.stringify() достаточным, но не необходимым для сериализации? Или необходимо, но недостаточно? Или это не является необходимым и не достаточным для сериализации объектов JavaScript?

+0

Я мог бы добавить, что JSON предназначен для представления _subset_ объекта JavaScript, и, кроме своей собственной своеобразной нотации (не столь гибки, как литеральный объект JavaScript), не включает функциональные свойства, методы AKA. – Manngo

ответ

11

Сериализация - это процесс преобразования данных в формат, который может быть записан на диск или передан по сети (или написан на бумаге, если это то, что вы хотите). Обычно сериализация преобразует объекты в текст, но это необязательно, так как существует несколько форматов сериализации, таких как 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.

2

Старый вопрос, но следующая информация может быть полезна для потомков.

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

Наиболее очевидным преимуществом JSON является то, что он представляет объекты таким же образом, что и литералы объектов JavaScript, хотя и немного менее гибкие. Тем не менее, если вы можете представить нормальные данные в JavaScript, то JSON - хорошее совпадение.

Важнейшей особенностью является то, что, поскольку он представляет объекты, а также массивы, он может представлять собой довольно сложные иерархические данные &.

По той или иной причине JSON имеет более или менее вытесненный XML в качестве предпочтительной сериализации для передачи данных между сервером и браузером. Это настолько полезно, что многие языки включают в себя свои собственные функции JSON (например, у PHP есть более известные имена json_encode & json_decode), а также некоторые современные базы данных. Я сам счел удобным использовать функции JSON для хранения более сложной структуры данных в одном поле базы данных без JavaScript в любом месте).

Короткий ответ: да, по большей части это достаточный шаг для сериализации большинства данных (не двоичных). Однако это не так необходимо, поскольку есть альтернативы.

Сериализация двоичных данных, с другой стороны, теперь это уже совсем другая история ...

Смежные вопросы