Node.js使用Request发请求时读取JSON属性返回undefined问题
问题根因
- request库默认返回的响应body为字符串类型,即使内容符合JSON格式,也不会自动转换为JavaScript对象,直接通过
.操作符访问不存在的属性自然返回undefined。 - 之前尝试JSON.parse不生效,大概率是返回的body首尾存在换行、空格等不可见字符,导致解析失败。
你看到console.log输出的
{"status":1,"request":"67055353796"}是字符串的内容,和JS对象的打印结果视觉上高度相似,很容易误判为已经是对象类型,可以加一行console.log(typeof body)验证,输出为string即可确认。
修复方案
两种方案任选其一即可:
方案1:手动解析JSON
对body先去除首尾空白字符再做JSON解析,同时增加异常捕获避免解析出错导致程序崩溃:
request.post({url:`http://2captcha.com/in.php?key=${key}&method=${service}&sitekey=${sitekey}&pageurl=${pageurl}&json=${json}`}, function(error, response, body){ if (response.statusCode == 200) { console.log(body); let bodyObj; try { // 先trim掉首尾空白字符再解析 bodyObj = JSON.parse(body.trim()); } catch (err) { console.error('JSON解析失败:', err); return; } console.log(bodyObj.status); console.log(bodyObj.request); } })
方案2:开启request自动解析配置
在请求配置项中添加json: true,request会自动识别JSON响应并转换为JS对象,无需手动解析:
request.post({ url:`http://2captcha.com/in.php?key=${key}&method=${service}&sitekey=${sitekey}&pageurl=${pageurl}&json=${json}`, // 开启自动解析JSON json: true }, function(error, response, body){ if (response.statusCode == 200) { console.log(body); console.log(body.status); console.log(body.request); } })
内容的提问来源于stack exchange,提问作者user15205016
相关产品推荐
相关产品推荐

