При конвертации объекта в json, а затем обратно теряется информация о файле

Проблема состоит в том, что нужно узнать информацию о том, сколько весит файл, и когда был редактирован в последний раз, но при использовании данного кода =>=>=>

onDropFiles(files) {
  console.log(files) // до конвертации всё нормально
  let objFile = JSON.stringify(files)
  console.log(objFile);
  console.log(JSON.parse(objFile)); //здесь же получаю только лишь 2 значения

},
остаётся только то, что выделено жирным в консоли, в чём может быть ошибка?

Скрин до Скрин до

Скрин после Скрин после


Ответы (1 шт):

Автор решения: Daniil Loban

Начну с того почему теряется информация, скорее всего по причине того что в объекте файл определена функция которая выбирает именно эти 2 поля для сериализации в строку наверно по причине того что данные изначально строки в отличие от остальных (числа, даты)

Вот пример как это может происходить:

class Person {
  constructor(name, date){
    this.name = name
    this.date = date
  }
}

p = new Person('JOHN', new Date())
console.log(JSON.stringify(p)); // будет и имя и дата

p.toJSON = function(){ return {"name": this.name}} // <------
console.log(JSON.stringify(p)); // тут не будет даты

Извлечение данных из объектов можно делать гораздо более удобным способом, разумеется с дополнительными проверками. Например файл может быть один, или несколько, тогда это либо объект либо массив объектов. Как только мы определились с тем что же мы получили на входе, нам нужно извлечь к примеру дату и размер из файла:

const {lastModifiedDate, size} = file // files[0]

Таким образом в случае с одним файлом можно получить нужную информацию в константы. Если файлов будет много то делаем то же самое но в цикле, сохраняя в массив.

→ Ссылка