#json #angular
#json #angular
Вопрос:
Мне нужно проанализировать ответ json, содержащий два ключа. Ответ выглядит так
{
status: 0;
message: 'some error 404'
}
В чистом nodejs или React вы могли бы просто сделать: if (response.status===1)console.log('success')
.
Тем не менее, мне было трудно делать это в angular. Может ли кто-нибудь помочь мне и сказать, как я могу проанализировать ответ JSON? Я приложил макет кода.
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Component } from '@angular/core';
@Component({
selector: 'app-create-employee',
templateUrl: './create-employee.component.html',
styleUrls: ['./create-employee.component.css']
})
export class CreateEmployeeComponent {
constructor(private http: HttpClient) { };
onFormSubmit() {
let options = {
headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
};
let body = new URLSearchParams();
body.set('data', 'stackoverflow');
this.http.post('http://localhost:8080/createEmployee', body.toString(), options)
.subscribe(response => {
console.log(response.status);
console.log(response.message);
});
}
}
Комментарии:
1. В чем именно здесь проблема? Вы не можете получить доступ к свойствам? Каков вывод
console.log
инструкций?2. Ошибка заключалась в том, что свойство ‘status’ не существует для типа ‘Object’. Я неправильно реализовал интерфейс. Автор с принятым ответом смог решить эту проблему. В любом случае, спасибо.
Ответ №1:
Согласно документации, Angular может анализировать для вас объекты из строковых ответов, если вы укажете ему, как это сделать. Вы можете использовать это в качестве примера.
Сначала определите интерфейс внутри вашего компонента чуть ниже вашего импорта:
export interface Response {
status: number,
message: string
}
Это сообщает angular, как проанализировать ответ json с вашего сервера. Последний бит — использовать этот интерфейс в вашем post-запросе следующим образом:
this.http.post<Response>('http://localhost:8080/createEmployee', body.toString(), options)
.subscribe(response => {
console.log(response.status);
console.log(response.message);
});