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

时间:2016-05-24 14:50:15

标签: angularjs json local-storage

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

Unexpected token u in JSON at position 0

服务

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

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

3 个答案:

答案 0 :(得分:12)

首先要做的是查看您尝试解析的内容。我的猜测是你会发现它是"undefined",这是无效的JSON。您已获得undefined,因为您尚未在本地存储空间中保存任何内容。然后,undefined会转换为"undefined"无法解析的字符串JSON.parse

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

存储(就像你的那样)

localStorage.setItem("key", JSON.stringify(thing));

检索(这是不同的)

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

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

答案 1 :(得分:6)

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

您可以转到浏览器的开发工具的网络标签并查看回复来验证它。

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

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

希望这有帮助!

答案 2 :(得分:4)

我也遇到了同样的错误。问题是我从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'));
}

因此,JSON Parser抛出错误。

当我将它映射成这样的纯文本时:

.map((res: Response) => res.text());

有效。