Неожиданный токен u в JSON в позиции 0
когда я пытаюсь преобразовать строку в объект, я получаю ошибку ``:
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'));
}
Ответы
Ответ 1
Первое, что нужно сделать, это посмотреть, что вы пытаетесь проанализировать. Я предполагаю, что вы найдете его "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
}
Таким образом, я всегда разбираюсь в чем-то действительном.
Ответ 2
Вы получаете эту ошибку, потому что вы не возвращаете ответ как строку JSON, в то время как ваш браузер ожидает строку JSON для синтаксического анализа. Следовательно, он берет первую букву строки ответа и выдает ошибку.
Вы можете проверить это, перейдя на вкладку в сети вашего браузера Инструменты Dev и просмотрев ответ.
Чтобы устранить эту проблему, вы можете использовать код ниже в своем запросе http.
var promiz = $http.post(url, data, {
transformRequest: angular.identity,
transformResponse: angular.identity,
headers: {
'Content-Type': undefined
}
});
Надеюсь, это поможет!
Ответ 3
Я тоже получал ту же ошибку. Проблема заключалась в том, что ответ, который я получал от 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());
Он работает.