ユーザーがアップロードしたJSONファイルを読み取って、配列にコピーしようとしています。ただし、.readAsText()を使用すると、返される戻り値には、\ "や\ n、その他の文字列のようなプロパティなど、文字列のフォーマットが(明らかに)含まれます。
FileReader(またはサーバーを含まない他の形式の読み取りファイル)を使用してJSONファイルを読み取り、プレーンJSONのみを返す方法はありますか?
たとえば、それを返すようにする
[
{"hello": "world"}
]
または
[{"hello": "world"}]
ではなく
"[\n{\"hello\": \"world\"}\n]"
?
編集:JSON.parse(text)メソッドを認識しましたが、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で読み取ったものを文字列である別の変数に取得し、その新しい変数を解析できますか?
問題のコードは FileReader
を誤って使用しています。
FileReader
.readAs<Type>
操作は非同期です。 FileReader
にはload
イベントとloadend
イベントがあり、result
プロパティはevent.target
およびFileReader
インスタンスは、結果として非同期で処理されるデータです。
FileReader
オブジェクト自体を解析しないでください。
.readAs<Type>
は、JavaScriptプレーンオブジェクトではなく、 Blob
がパラメータとして渡されることを期待しています。
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);