Вызывает ли JSON.parse обратный вызов при десериализации строки?

JSON.stringify помощник в JavaScript (насколько мне известно) при вызове экземпляра класса ищет toJSON() метод и автоматически вызывает его для данного экземпляра, а затем использует его вывод в качестве значения. Интересно, есть ли аналогичный механизм для противоположной операции? Есть ли у JSON.parse обратный вызов по умолчанию, который будет вызываться при десериализации строки?

Беглый просмотр документации должен ответить на этот вопрос

Bergi 28.12.2020 12:53

Поэтому я отрицаю их из-за отсутствия (задокументированных) исследовательских усилий.

Bergi 29.12.2020 19:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
174
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Да, JSON.parse() имеет параметр оживления, который можно передать при десериализации.

Вот пример использования

const json = `{
  "a": "1", 
  "b": "true", 
  "c": "foo", 
  "d": "world", 
  "e": "2020-12-26",
  "f": "bar"
}`;

function reviver(key, value) {
  if (key === "a") //convert to number
    return Number(value);
  
  if (key === "b") //convert to boolean
    return value === "true";
  
  if (key === "c") //change value entirely
    return "hello";
  
  if (key === "e") //convert to a different object
    return new Date(value);
  
  if (key === "f") //omit key-value pair
    return;
  
  return value; //preserve anything else
}

const obj = JSON.parse(json, reviver);

console. log(obj);

Да; вы можете предоставить функцию «возрождения» (см. руководство), которую вы потенциально можете использовать для распознавания специальных данных в вашем JSON и их соответствующего анализа. Например, даты преобразуются в строки с помощью JSON.stringify, а JSON.parse оставляет их как таковые, поэтому возвращает строку, которая является результатом Date.toJSON. Однако, указав функцию «reviver», мы можем обнаружить наш объект даты (по его ключу в моем примере — вы также можете обнаружить вывод вашей функции toJSON в значении) и вернуть объект Date, а не строку:

const obj = {
  id: 1,
  date: new Date(2020, 12, 25, 15, 4, 5)
}

const json = JSON.stringify(obj);
console.info(json);

let parsedObj = JSON.parse(json);
console.info(parsedObj.date.toString());

parsedObj = JSON.parse(json, (key, value) =>
  key == 'date' ? new Date(value) : value
);

console.info(parsedObj.date.toString());

Другие вопросы по теме