web-dev-qa-db-fra.com

Jeton inattendu u dans JSON en position 0

quand j'essaie de convertir une chaîne en objet, j'obtiens l'erreur ``:

Unexpected token u in JSON at position 0

Un service

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

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

La première chose à faire est de regarder ce que vous essayez d'analyser. À mon avis, vous constaterez que c'est "undefined", qui est un JSON invalide. Vous obtenez undefined parce que vous n'avez encore rien enregistré dans cette clé dans le stockage local. undefined est ensuite converti en chaîne "undefined" lequel JSON.parse ne peut pas analyser.

J'ai l'habitude de stocker et de récupérer des choses dans un stockage local comme ceci:

Stockage (comme le vôtre):

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

Récupération (c'est différent):

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

De cette façon, je suis toujours en train d'analyser quelque chose de valide.

12
T.J. Crowder

Vous obtenez cette erreur car vous ne retournez pas la réponse sous forme de chaîne JSON alors que votre navigateur s'attend à une chaîne JSON à analyser. Par conséquent, il prend la première lettre de votre chaîne de réponse et génère une erreur.

Vous pouvez le vérifier en accédant à l'onglet Réseau des outils de développement de votre navigateur et en consultant la réponse.

Pour résoudre ce problème, vous pouvez utiliser le code ci-dessous dans votre demande http.

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

J'espère que cela t'aides!

6
Abhishek Dadhich

J'avais aussi la même erreur. Le problème était que la réponse que je recevais de HTTP Get Request n'était pas au format JSON, mais que c'était du texte brut.

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'));
}

Ainsi, l’analyseur JSON a généré une erreur.

Quand je mappe en texte brut comme ceci:

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

Ça marche.

5
Aarchie