Json 类型为'的参数;答复';不可分配给类型为';字符串';
我有一个我正在做的项目。 其想法是使用angular 4从GoogleBookAPI检索书籍 我正在努力理解如何读取JSON响应,我还在学习。 我在互联网上搜索,在GitHub上找到了这段源代码 我得到以下错误Json 类型为'的参数;答复';不可分配给类型为';字符串';,json,angular,httpclient,google-apis-explorer,Json,Angular,Httpclient,Google Apis Explorer,我有一个我正在做的项目。 其想法是使用angular 4从GoogleBookAPI检索书籍 我正在努力理解如何读取JSON响应,我还在学习。 我在互联网上搜索,在GitHub上找到了这段源代码 我得到以下错误 Argument of type 'Response' is not assignable to parameter of type 'string'. 这条线 let bookResponse = JSON.parse(body); 我不确定我的做法是否正确。 谢谢你的帮助
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)
);
}
私有打印数据(res:Response){
让body=res;
let books:Array=new Array();
让bookResponse=JSON.parse(body);
console.log(bookResponse);
console.dir(booksresponse);
对于(让book of bookResponse.items){
书。推({
标题:book.volumeInfo.title,
副标题:book.volumeInfo.subTitle,
类别:book.volumeInfo.categories,
作者:book.volumeInfo.authors,
评级:book.volumeInfo.rating,
pageCount:book.volumeInfo.pageCount,
image:book.volumeInfo.imageLinks==未定义?“”:book.volumeInfo.imageLinks.缩略图,
description:book.volumeInfo.description,
isbn:book.volumeInfo.industryIdentifiers,
previewLink:book.volumeInfo.previewLink
});
}
}
JSON.parse
接受一个字符串,但传递给它的是一个角度的响应,它是一个对象(不是字符串)。要将角度响应
转换为字符串,可以对其调用toString
,如下所示:
let bookResponse = JSON.parse(body.toString());
作为国家
responseType值确定如何解析成功的响应体。如果responseType是默认的json,则结果对象的类型接口可以作为类型参数传递给request()
HttpClient
get
已使用JSON解析响应。默认情况下,parse
无需调用它两次
结果是普通对象,而不是响应
(它属于并且在不导入时可能与之混淆)
上面提到的代码使用Angular 2和Http
,其中的代码不适用于此处HttpClient
是Angular 4中引入的较新API。Http
和HttpClient
之间的主要实际区别在于后者不需要向请求中添加.map(response:response=>response.json())
。顺便说一句,上面的代码中有一个错误。HttpParams实例是不可变的,应该链接.set
。这个par.set('q',searchparam)
不起作用。谢谢Estus,它对我起作用是因为我只有一个参数,但是如果我有更多,那就是一个问题。它起作用是因为你在另一个地方有正确的代码,params:new-HttpParams().set('q',searchparam)
谢谢你,请帮我这里
let bookResponse = JSON.parse(body.toString());