【发布时间】:2017-10-29 06:06:58
【问题描述】:
我正在处理这个项目。 这个想法是使用 Angular 4 从谷歌图书 API 中检索图书
我正在努力理解如何阅读 JSON 响应,我仍在学习 Angular。 我在网上搜索,在 GitHub 上找到了这个源代码 google bookstore
我收到以下错误
Argument of type 'Response' is not assignable to parameter of type 'string'.
对于这一行
let bookResponse = JSON.parse(body);
我不确定我是否以正确的方式进行操作。 感谢您的帮助
以下是我发送 HTTP 请求的方法。
getBooks(searchparam: any){
let par = new HttpParams();
par.set('q', searchparam);
return this.httpClient.get('https://www.googleapis.com/books/v1/volumes', {
params : new HttpParams().set('q',searchparam)
}).map(
(response: Response) => {
let data = response;
return data;
}
);
}
以下是从HTTP请求中获取数据并读取JSON响应的方法
getBook() {
const dataArrya = this.searchForm.get('param').value;
console.log(dataArrya);
this.requestService.getBooks(dataArrya)
.subscribe(
response => {
this.printData(response)
// console.log(this.bookData);
},
(error) => console.log(error)
);
}
private printData(res: Response) {
let body = res;
let books: Array<Book> = new Array<Book>();
let bookResponse = JSON.parse(body);
console.log(bookResponse);
console.dir(bookResponse);
for (let book of bookResponse.items) {
books.push({
title:book.volumeInfo.title,
subTitle: book.volumeInfo.subTitle,
categories: book.volumeInfo.categories,
authors: book.volumeInfo.authors,
rating: book.volumeInfo.rating,
pageCount: book.volumeInfo.pageCount,
image: book.volumeInfo.imageLinks === undefined ? '' : book.volumeInfo.imageLinks.thumbnail,
description: book.volumeInfo.description,
isbn: book.volumeInfo.industryIdentifiers,
previewLink: book.volumeInfo.previewLink
});
}
}
【问题讨论】:
-
对了,上面的代码有错误。 HttpParams 实例是不可变的,
.set应该链接到 stackoverflow.com/questions/45210406/… 。这个par.set('q', searchparam)不起作用。 -
感谢 Estus,它对我有用,因为我只有一个参数,但如果我有更多,那就是个问题。
-
之所以有效,是因为您在另一个地方有正确的代码,
params : new HttpParams().set('q',searchparam)
标签: json angular httpclient google-apis-explorer