Использование FileReader для чтения файла JSON? - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь прочитать файл JSON, загруженный пользователем, и попытаться скопировать его в массив.Однако с помощью .readAsText () возвращаемое мной значение имеет форматирование строки (очевидно), например, включение \ "и \ n и других строковых свойств.

Есть ли способ, которым я могуиспользовать FileReader (или любую другую форму чтения файлов, не связанную с сервером), чтобы прочитать файл JSON и вернуть только простой JSON?

Например, вернуть его

[
  {"hello": "world"}
]

или

[{"hello": "world"}]

, а не

"[\n{\"hello\": \"world\"}\n]"

?

Редактировать: теперь я знаю о методе JSON.parse (текст), но яя получаю сообщение об ошибке при разборе объекта FileReader

 let fileUploaded = new FileReader();
 fileUploaded.readAsText(MY_JSON_FILE);
 console.log(JSON.parse(fileUploaded));

возвращает ошибку error TS2345: Argument of type 'FileReader' is not assignable to parameter of type 'string'

Могу ли я получить то, что я прочитал с FileReader, в другую переменную, которая является строкой, а затемразобрать что нового var?

1 Ответ

0 голосов
/ 10 февраля 2019

Код в вопросе использует FileReader неправильно.

FileReader .readAs<Type> операция асинхронная.FileReader имеет load и loadend события, где свойство result экземпляра event.target и FileReader является результирующими асинхронно обработанными данными.

Не анализировать сам объект FileReader.

.readAs<Type> ожидает, что Blob будет передан как параметр, а не простой объект JavaScript.

const MY_JSON_FILE = [{
  "hello": "world"
}];

let json = JSON.stringify(MY_JSON_FILE);

const blob = new Blob([json], {type:"application/json"});

const fr = new FileReader();

fr.addEventListener("load", e => {
  console.log(e.target.result, JSON.parse(fr.result))
});

fr.readAsText(blob);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...