正在将所选文件解析为 Angular 中的数组
Parsing selected file to array in Angular
我正在尝试将 selected 文件解析为 Angular 7 中的对象数组。
HTML 其中我 select 文件:
<div class="form-group" *ngIf="import">
<label for="file">Choose backup file</label>
<input type="file" id="file" (change)="handleFileInput($event.target.files)">
</div>
我已经能够使用以下代码片段记录文件中的值:
fileToUpload: File = null;
handleFileInput(files: FileList) {
this.fileToUpload = files.item(0);
this.parseFile();
}
parseFile() {
const fileReader = new FileReader();
fileReader.onload = (e) => {
console.log(fileReader.result);
}
fileReader.readAsText(this.fileToUpload);
}
该文件始终是 json 包含对象数组的文件,如下所示:
[
{"Test": "ValueA", "Value": "SomeStringA"},
{"Test": "ValueB", "Value": "SomeStringB"},
...
]
我的目标是将以下对象反序列化为对象数组 ObjectA[]
:
export interface ObjectA {
Test: string;
Value: string;
}
有人可以帮助我如何继续使用 filereader 来实现这个目标吗?
非常感谢
JSON.parse()
接受一个字符串,解析它并 returns 一个对象。您可以使用它来解析您的文件。
你可以这样做:
async parseFile(): Promise<ObjectA[]> {
const fileReader = new FileReader();
return new Promise<ObjectA[]>((resolve) => {
fileReader.onload = (e) => {
resolve(JSON.parse(fileReader.result));
}
fileReader.readAsText(this.fileToUpload);
});
}
当然,我的解决方案缺少错误处理,但您明白了要点。下面是演示我的解决方案的工作代码片段(减去类型转换)。
async function uploadFiles(files) {
for(const file of files) {
const parsedObject = await parse(file);
// Do stuff with your object
}
}
async function parse(file) {
const fileReader = new FileReader();
return new Promise((resolve) => {
fileReader.onload = (e) => {
resolve(JSON.parse(fileReader.result));
}
fileReader.readAsText(file);
});
}
<div>
<input type="file" onchange="uploadFiles(this.files)" />
</div>
我正在尝试将 selected 文件解析为 Angular 7 中的对象数组。
HTML 其中我 select 文件:
<div class="form-group" *ngIf="import">
<label for="file">Choose backup file</label>
<input type="file" id="file" (change)="handleFileInput($event.target.files)">
</div>
我已经能够使用以下代码片段记录文件中的值:
fileToUpload: File = null;
handleFileInput(files: FileList) {
this.fileToUpload = files.item(0);
this.parseFile();
}
parseFile() {
const fileReader = new FileReader();
fileReader.onload = (e) => {
console.log(fileReader.result);
}
fileReader.readAsText(this.fileToUpload);
}
该文件始终是 json 包含对象数组的文件,如下所示:
[
{"Test": "ValueA", "Value": "SomeStringA"},
{"Test": "ValueB", "Value": "SomeStringB"},
...
]
我的目标是将以下对象反序列化为对象数组 ObjectA[]
:
export interface ObjectA {
Test: string;
Value: string;
}
有人可以帮助我如何继续使用 filereader 来实现这个目标吗?
非常感谢
JSON.parse()
接受一个字符串,解析它并 returns 一个对象。您可以使用它来解析您的文件。
你可以这样做:
async parseFile(): Promise<ObjectA[]> {
const fileReader = new FileReader();
return new Promise<ObjectA[]>((resolve) => {
fileReader.onload = (e) => {
resolve(JSON.parse(fileReader.result));
}
fileReader.readAsText(this.fileToUpload);
});
}
当然,我的解决方案缺少错误处理,但您明白了要点。下面是演示我的解决方案的工作代码片段(减去类型转换)。
async function uploadFiles(files) {
for(const file of files) {
const parsedObject = await parse(file);
// Do stuff with your object
}
}
async function parse(file) {
const fileReader = new FileReader();
return new Promise((resolve) => {
fileReader.onload = (e) => {
resolve(JSON.parse(fileReader.result));
}
fileReader.readAsText(file);
});
}
<div>
<input type="file" onchange="uploadFiles(this.files)" />
</div>