在位置0的JSON中出现意外的标记u

nev*_*eup 14 json local-storage angularjs

当我尝试将字符串转换为对象时,我得到错误``:

Unexpected token u in JSON at position 0
Run Code Online (Sandbox Code Playgroud)

服务

setUser : function(aUser){ 
    //sauvegarder User       
    localStorage.setItem('User', JSON.stringify(aUser));
},

getUser : function(){
    //récuperer User      
    return JSON.parse(localStorage.getItem('User'));
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 13

首先要做的是查看您要解析的内容.我的猜测是你会找到它"undefined",这是无效的JSON.你得到的undefined是因为你还没有在本地存储中保存任何东西.undefined然后转换成字符串"undefined",其JSON.parse无法解析.

我通常在本地存储中存储和检索东西,如下所示:

存储(就像你的一样):

localStorage.setItem("key", JSON.stringify(thing));
Run Code Online (Sandbox Code Playgroud)

检索(这是不同的):

thing = JSON.parse(localStorage.getItem("key") || "null");
if (!thing) {
    // There wasn't one, do whatever is appropriate
}
Run Code Online (Sandbox Code Playgroud)

这样,我总是在解析有效的东西.


Abh*_*ich 6

您收到此错误是因为在浏览器期望要解析JSON字符串时,您没有将响应作为JSON字符串返回.因此,它会获取响应字符串的第一个字母并抛出错误.

您可以通过浏览器的Dev工具的网络选项卡并查看响应来验证它.

要解决此问题,您可以在http请求中使用以下代码.

var promiz = $http.post(url, data, {
      transformRequest: angular.identity,
      transformResponse: angular.identity,
      headers: {
        'Content-Type': undefined
      }
    });
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


小智 5

我也遇到了同样的错误。问题是我从HTTP Get Request获得的响应不是JSON格式,而是纯文本。

this.BASE_URL = "my URL";

public getDocument() {
    return this.http.get(this.BASE_URL)
      .map((res: Response) => res.json())
      .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
}
Run Code Online (Sandbox Code Playgroud)

因此,JSON分析器抛出错误。

当我将其映射为纯文本时,如下所示:

.map((res: Response) => res.text());
Run Code Online (Sandbox Code Playgroud)

有用。