Методы JavaScript JSON, toJSON
JavaScript Object Notation (JSON) - это заметный формат для представления объектов и значений. Изначально этот формат был создан для JavaScript, но несколько языков также включают библиотеки для его обработки. Следовательно, использование JSON для обмена данными проще в случае, если клиент использует JavaScript, а сервер написан на PHP, Ruby, Java и т. д.
В целом, JavaScript предлагает два метода преобразования: JSON.stringify и JSON.parse. Первый можно использовать для преобразования объектов в JSON, а второй - для преобразования JSON обратно в объект.
JSON.stringify
Рассмотрим следующий пример использования JSON.stringify:
Пожалуйста, учтите, что JSON-закодированный объект отличается от литерала объекта. Главные различия следующие:
- Строка использует двойные кавычки. В JSON не должно быть одиночных кавычек или обратных кавычек. Например, 'W3Docs' становится "W3Docs".
- Двойные кавычки следует использовать также для имен свойств объекта. Это обязательно. Например, booksCount : 4 станет "booksCount": 4.
Вы можете применить метод JSON.stringify также к примитивам. Он поддерживает следующие типы данных:
Вот пример:
Обратите внимание, что JSON.stringify пропускает некоторые объекты, специфичные для JavaScript, такие как функциональные свойства (методы), символьные свойства и свойства, хранящие undefined.
Давайте рассмотрим следующий случай:
Самое лучшее в этом - то, что вложенные объекты автоматически поддерживаются и преобразуются.
Например:
Но есть и существенное ограничение: вы не должны использовать циклические ссылки.
Например:
Исключение и Преобразование: replacer
Для JSON.stringify используется следующий полный синтаксис:
let json = JSON.stringify(value[, replacer, space])
У него три аргумента:
- значение: значение для кодирования;
- replacer: массив свойств для кодирования или функция отображения функция(key, value);;
- пробел: количество пробелов, используемых для форматирования.
JSON.stringify большую часть времени использует первый аргумент. Но если вы хотите улучшить свой процесс замены, вы также можете использовать второй аргумент. Если массив свойств передан ему, то кодируются только эти свойства.
Давайте посмотрим на пример:
Теперь давайте попробуем добавить в список все свойства, за исключением books.free:
Как вы видите, все сериализуется, кроме canUse. Также заметно, что приведенный список выглядит довольно длинным. К счастью, может быть вызвана функция replacer. Вы можете вызвать ее для каждой пары key, value, и может быть возвращено “замененное” значение. Вы можете использовать его вместо исходного значения. Для игнорирования canUse в приведенном ниже примере возвращается undefined:
Учтите, что функция replacer получает любую пару ключ / значение вместе с элементами массива и вложенными объектами.
Форматирование:пробел
Как уже упоминалось, у JSON.stringify есть три аргумента. Третий - количество пробелов, используемых для форматирования. Обычно разработчики используют аргумент space для достижения отличного вывода.
space = 2 приказывает JavaScript отображать вложенные объекты на разных строках с отступом в два пробела внутри объекта.
Например:
Пользовательский “ toJSON ”
Как правило, объект может предоставить метод toJSON для реализации преобразования to-JSON. Если он доступен, JSON.stringify автоматически вызывает его.
Вот пример:
В приведенном выше случае update (1) преобразуется в строку. Причина в том, что все даты имеют встроенный метод toJSON.
Если вы добавите пользовательский toJSON для объекта books (2), он будет выглядеть следующим образом:
JSON.parse
Для декодирования JSON-строки используется другой метод, называемый JSON.parse со следующим синтаксисом:
let value = JSON.parse(str, [reviver]);
JSON довольно сложен: объекты и массивы могут включать другие объекты и массивы. Но обязательно следует формату JSON.
Ниже вы можете найти типичные ошибки в рукописном JSON:
let json = `{
welcome: "Welcome", // mistake: property name without quotes
"site": 'W3Docs', // mistake: single quotes in value (must be double)
'hasAdmin': true // mistake: single quotes in key (must be double)
"update": new Date(2000, 2, 3), // mistake: no "new" is allowed, only bare values
"books": [1, 2, 3, 4] // here all fine
}`;
Также обратите внимание, что JSON не позволяет комментировать. Если вы добавите комментарий к нему, вы сделаете его недействительным. Существует уникальный формат JSON, который поддерживает ключи без кавычек, комментарии и многое другое.
Резюме
JSON представляет формат данных со стандартом, независимым от библиотек для большинства языков программирования. Он поддерживает массивы, строки, объекты, булевы значения, числа и null.
JavaScript имеет методы JSON.stringify для сериализации в JSON и JSON.parse для чтения из JSON. Если у объекта есть toJSON, вам нужно вызвать его с помощью JSON.stringify..
Время Викторины: Проверьте Свои Навыки!
отовы проверить свои знания? Погрузитесь в наши интерактивные викторины для более глубокого понимания и веселого способа закрепить знания.