从API返回时如何获取JSON密钥的值

时间:2020-01-26 18:21:25

标签: json angular

我的API将JSON对象返回给angular函数

我需要在该JSON中获取键的值。 如果我直接在控制台上打印该值,则没有错误。

我的Angular代码:

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)); 工作良好。 它显示数据: enter image description here

但是,如果我尝试在“数据”中获取“状态”的值,

console.log("Status : " + data.status);

出现错误:

 error TS2339: Property 'status' does not exist on type 'Object'.

我需要在 if 语句中使用 status 的值

请帮助获取data.status的值

3 个答案:

答案 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);