我试图在文件中保存json Web响应。我能够创建并保存文件,但我无法获取其中的Web响应数据。在文件中只有这个:[object Object]
这是我的组成部分:
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
moduleId: module.id,
templateUrl: 'home.component.html',
styleUrls: ['home.component.css']
})
export class HomeComponent implements OnInit {
constructor(private http: HttpClient) {
}
nodes: any;
ngOnInit(): void {
// Make the HTTP request:
this.http.get('http://someUrl').subscribe(data => {
// Read the result field from the JSON response.
this.nodes = data;
this.downloadFile(this.nodes);
});
}
downloadFile(data){
let blob = new Blob([data], { type: 'text/plain;charset=utf-8;' });
let dwldLink = document.createElement("a");
let url = URL.createObjectURL(blob);
let isSafariBrowser = navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1;
if (isSafariBrowser) { //if Safari open in new window to save file with random filename.
dwldLink.setAttribute("target", "_blank");
}
dwldLink.setAttribute("href", url);
dwldLink.setAttribute("download", "TEST.txt");
dwldLink.style.visibility = "hidden";
document.body.appendChild(dwldLink);
dwldLink.click();
document.body.removeChild(dwldLink);
}
}
答案 0 :(得分:2)
有必要将对象转换为其字符串表示形式。可以采用JSON.stringify
。
let blob = new Blob([ JSON.stringify(data) ], { type: 'text/plain;charset=utf-8;' });
这是一个疯狂的猜测,但我希望你的 data
对象是response
。因此,您可能需要在其上调用.json()
来检索实际有效负载:
this.http.get('http://someUrl').subscribe(data => {
// Read the result field from the JSON response.
this.nodes = data;
this.downloadFile(this.nodes);
});
由于您使用的是某些HttpClient
而非标准Http
服务,因此很难说清楚。您显示的文件下载代码与我在of my projects中使用的代码相匹配。
调试提示是否可以在行 this.nodes = data.json();
上设置断点并在浏览器控制台中执行JSON.stringify(data)
?然后使用输出更新您的问题。它将有助于了解您实际上正在处理的对象。