当我尝试将字符串转换为对象时,我得到错误``:
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'));
}
答案 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());
有效。