我的API将JSON对象返回给angular函数
我需要在该JSON中获取键的值。 如果我直接在控制台上打印该值,则没有错误。
submit() : void {
console.log("FORM SUBMITTED")
console.log(JSON.stringify(this.register.value, undefined, 2));
this._registerService.register(this.register.value)
.subscribe(
data => {
console.log("DATA : ", JSON.stringify(data, undefined, 2));
console.log("Status : " + data.status);
if (data.status == "duplicate") {
console.log("DUPLICATE");
} else if (data.status == "success") {
console.log("SUCCESS");
}
},
error => {
console.log("ERRORrrr : ", JSON.stringify(error, undefined, 2));
this._router.navigate(['/500']);
}
)
}
在上面的代码中 console.log(“ DATA:”,JSON.stringify(data,undefined,2)); 工作良好。 它显示数据:
但是,如果我尝试在“数据”中获取“状态”的值,
console.log("Status : " + data.status);
出现错误:
error TS2339: Property 'status' does not exist on type 'Object'.
我需要在 if 语句中使用 status 的值
请帮助获取data.status的值
答案 0 :(得分:1)
您的.register
方法似乎正在返回Observable<object>
,因此TS编译器会出现此错误。也许最好使它成为通用方法:
register<T>(body: any) {
return this._http.post<T>(
'localhost:3000/register',
body,
{ observe: 'body' }
).catch(this.handleError);
}
您可以调用您的组件:
this._registerService.register<RegisterData>(this.register.value).subscribe((data) => {
if (data.status) {
// this will not throw a compiler error anymore as it will be of type RegisterData
}
});
界面为:
export interface RegisterData {
status: string;
summary: string;
details: string;
}
答案 1 :(得分:1)
我不知道您使用的是哪个版本的rxjs,但是在当前版本中,您必须使用catchError()来捕获Observable的错误。
这是我的解决方案:
register(body: any): Observable<{status: string, summary: string, details: string}> {
return this._http.post(
'localhost:3000/register', body,
{observe: 'body'}).pipe(catchError(this.handleError));
}
也许可以解决您的问题。
答案 2 :(得分:0)
我观察到返回的对象是一个关联数组。 所以我能够像这样解析关联数组: console.log(data [“ status”]);
,我可以通过以下方式将该数组转换为JSON: 让dataJson = JSON.parse(JSON.stringify(data))
此转换后,我可以通过以下方式访问JSON密钥值: console.log(dataJson.status);