Angular中HTTP PUT返回200但报JSON解析错误如何排查修复
问题原因
你的判断方向没错,核心问题是Angular 内置的HttpClient默认会将所有响应内容按JSON格式执行JSON.parse()解析,但你调用的/change-status接口返回的响应体是裸字符串000066/2022,完全不符合JSON语法规范,所以直接抛出了解析错误。
错误日志里的text字段已经明确打印了接口实际返回的内容:就是000066/2022。JSON规范要求字符串类型的值必须用双引号包裹,直接返回无包裹的裸字符串时,解析器读到开头的数字后遇到斜杠,无法匹配合法JSON结构,就会报Unexpected number in JSON at position 1的错误,和你怀疑的前导零没有直接关系。
修复方法
二选一即可:
- 后端适配(推荐):修改接口返回逻辑,返回标准合法JSON结构,比如将返回内容调整为
{"code": "000066/2022"},这样Angular默认的JSON解析逻辑可以正常工作,前端业务代码里取res.code就能拿到需要的字符串值。 - 前端配置调整:如果不方便改后端,就在前端发起请求时明确指定响应类型为纯文本,跳过默认的JSON解析步骤,修改service中的put方法:
put(data: any): Observable<any> { const url = "/change-status"; // 声明响应类型为text,不会自动执行JSON.parse return this.http.put(url, data, { responseType: 'text' }); }
修改后订阅请求拿到的res就是原始字符串000066/2022,不会再抛出解析错误,你现有组件里拼接成功提示的逻辑可以正常运行。
额外提示
你贴出的component.ts代码里存在请求嵌套的问题,被注释的putData调用位置不合理,后续建议用switchMap等操作符串联两个请求,避免嵌套导致的错误捕获遗漏、内存泄漏问题,不过这个问题和当前的JSON解析报错无关。
内容的提问来源于stack exchange,提问作者Sophia
相关产品推荐
相关产品推荐

