Angular中Promise响应返回对象数组而非JSON字符串如何解决?
问题根因
你遇到的[object Object]输出是因为直接将JavaScript对象赋值/拼接给字符串类型变量时,会默认调用对象的toString()方法,和Angular HTTP请求的基础处理逻辑无关。
Angular的HttpClient.get()默认会自动把接口返回的JSON响应反序列化为JavaScript对象,你拿到的data本身就已经是解析后的JS对象,不是原始JSON字符串,直接赋值给字符串就会触发上述的默认转换逻辑。
解决方法
分两种场景按需处理即可:
- 如果你需要直接操作JSON里的字段:直接访问对象属性即可,不需要转字符串。比如接口返回
{"name":"test","id":1},你直接用data.name、data.id就能拿到对应值。 - 如果你确实需要拿到原始的JSON字符串,可以二选一处理:
- 将拿到的JS对象重新序列化为JSON字符串,调用
JSON.stringify()方法即可,示例代码如下:
return this.http.get(...) .toPromise() .then(data => { // 把对象转回JSON字符串 const jsonStr = JSON.stringify(data); return jsonStr; })- 直接指定请求响应类型为text,让
HttpClient不做自动JSON反序列化,直接返回接口原始字符串内容,示例代码如下:
return this.http.get('你的接口地址', {responseType: 'text'}) .toPromise() .then(data => { // 这里的data直接就是接口返回的原始JSON字符串 return data; }) - 将拿到的JS对象重新序列化为JSON字符串,调用
额外注意
如果接口返回的是对象数组,遍历的时候要逐个处理对象属性,不要直接把数组对象和字符串拼接,否则也会出现多个[object Object]拼接的结果。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

