Неожиданный токен 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());

Он работает.