如何修复 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

SyntaxError:位置 1 处 JSON 中的意外标记 o

SyntaxError:位置 1 处 JSON 中的意外标记 o