如何修复 SyntaxError:位置 0 处 JSON 中的意外标记 b
Posted
技术标签:
【中文标题】如何修复 SyntaxError:位置 0 处 JSON 中的意外标记 b【英文标题】:How To Fix SyntaxError: Unexpected token b in JSON at position 0 【发布时间】:2019-09-15 20:54:40 【问题描述】:我想使用 Spring MVC 从后端读取电子邮件地址作为字符串。但是,当我尝试使用 Angular 的 HttpClient
读取它时,我收到以下错误:
SyntaxError: Unexpected token b in JSON at position 0 at JSON.parse
这是控制台中显示的错误截图:
这是我在 Angular 中用来读取响应的代码:
public findEmail(username: string): Observable<string>
let params = new HttpParams();
params = params.append('username', username);
return this.httpClient.get<string>(this.baseUrl + '/findEmail', params);
这是提供响应的 Spring 控制器的代码:
@GetMapping(value = "/findEmail", params = "username" )
public String findEmail(@RequestParam String username)
return utilisateursService.findEmail(username);
【问题讨论】:
显示你的 json 响应 你能把结果的console.log()
放到findEmail()
函数调用吗?可能是您的 JSON 字符串不正确并且未正确序列化。
你能把smaple JSON放上去吗
通常人们至少内联图片而不是指向一些外部服务。但实际上,请在提问时阅读帮助。
【参考方案1】:
可能是您没有得到正确的 JSON 对象。请检查 api 响应并验证正确的 JSON 来自 api
【讨论】:
【参考方案2】:您没有 JSON 响应,您的响应是纯文本(电子邮件地址),如第一个屏幕截图中的错误所示。
当你返回一个字符串时,Spring 默认使用StringHttpMessageConverter
,这意味着它会简单地返回字符串并使用text/plain
,例如foo@example.com
。
这意味着响应不是有效的 JSON。要将其转换为有效的 JSON,您需要有额外的引号,例如 "foo@example.com"
。
解决办法是:
要么从后端返回 JSON 响应。这可以通过将响应(电子邮件)包装在一个类中来完成。一旦您返回对象,Jackson 就会将它们序列化为 JSON。例如:
@GetMapping
public User getUser()
// Response will be "email": "foo@example.com"
return new User("foo@example.com");
或者告诉HttpClient
使用responseType
选项将响应解释为纯文本。 the documentation也提到了这一点:
this.httpClient.get<string>('http://example.org', responseType: 'text');
或从现有转换器中删除StringHttpMessageConverter
。这将导致转换回退到 Jackson,这会将响应转换为有效的 JSON 字符串。可以在this answer 中看到解决方案。
或者,您可以在回复中添加额外的引号。例如,通过在 Spring 控制器中返回 "\"foo@example.com\""
。
【讨论】:
超级!!..谢谢。以上是关于如何修复 SyntaxError:位置 0 处 JSON 中的意外标记 b的主要内容,如果未能解决你的问题,请参考以下文章
在 JSON.parse 的位置 0 处获取“SyntaxError:”JSON 中的意外标记”
SyntaxError:app.js 中位置 0 处 JSON 中的意外标记 C [重复]
SyntaxError:在 Graphiql 中测试时,JSON 中位置 0 处出现意外标记 <
SyntaxError:位置 2 处 JSON 中的意外标记 e