Uncaught SyntaxError: Unexpected token avec JSON.analyser
quelles sont les causes de cette erreur sur la troisième ligne?
JS:
var products = [{
"name": "Pizza",
"price": "10",
"quantity": "7"
}, {
"name": "Cerveja",
"price": "12",
"quantity": "5"
}, {
"name": "Hamburguer",
"price": "10",
"quantity": "2"
}, {
"name": "Fraldas",
"price": "6",
"quantity": "2"
}];
console.log(products);
var b = JSON.parse(products); //unexpected token o
Ouvrez la console pour afficher l'erreur
- Vous n'avez pas de JSON? C'est un tableau/objet littéral.
Vous devez vous connecter pour publier un commentaire.
products
est un objet. (création d'un objet littéral)JSON.parse()
est utilisé pour convertir un chaîne contenant la notation JSON dans un objet Javascript.Votre code devient l'objet en chaîne de caractères (en appelant
.toString()
) afin d'essayer de l'analyser en tant que JSON texte.La valeur par défaut
.toString()
retourne"[object Object]"
, ce qui n'est pas JSON valide; d'où l'erreur..toString()
retourne (selon les spécifications).Disons que vous savez que c'est JSON valide, mais vous êtes encore en train de ce...
Dans ce cas, il est probable qu'il y a de caché/caractères spéciaux dans la chaîne à partir de quelle que soit la source de votre obtenir. Lorsque vous collez dans un programme de validation, ils sont perdus - mais dans la chaîne, ils sont toujours là. Ces caractères, tout invisible, cassera
JSON.parse()
Si
s
est votre première JSON, puis nettoyer avec:s = s.replace(/[\u0000-\u001F]+/g,"");
au lieu des = s.replace(/[\u0000-\u0019]+/g,"");
, pour remplacer tous les caractères de contrôle. Droit?s.replace(/\\n/g, "\\n")
je l'ai testé, il s'applique, par exemple"abc\\ndef".replace(/\\n/g,"\\'");
il faudrait le transformer enabc\'def
pourquoi voulez-vous faire? Ne json permet pas de terminer une ligne avec une barre oblique inverse.. pouvez-vous nous dire un peu plus sur ce que vos exemples ne sont et pourquoiIl semble que vous voulez stringify l'objet. Afin de faire ceci:
La raison de l'erreur est que
JSON.parse()
s'attend à unString
valeur etproducts
est unArray
.Remarque: je pense qu'il tente
json.parse('[object Array]')
qui se plaint qu'il n'a pas s'attendre à jetono
après[
.J'ai trouvé le même problème avec
JSON.parse(inputString)
.Dans mon cas, la chaîne d'entrée est à venir à partir de mon serveur page [retour à la page de la méthode].
J'ai imprimé la
typeof(inputString)
- c'était de la chaîne, toujours l'erreur se produit.J'ai aussi essayé
JSON.stringify(inputString)
, mais il n'a pas aidé.Plus tard, j'ai trouvé que c'était un problème avec la nouvelle ligne de l'opérateur
[\n]
, à l'intérieur d'un champ de valeur.J'ai fait un remplacer [avec un autre caractère, mettre la nouvelle ligne de retour après parse] et tout fonctionne bien.
changement de
JSON.parse
, les arguments doivent être une chaîne de caractères.JSON.parse(products.replace(/'/g, '"'))
JSON.analyser est en attente d'une Chaîne de caractères en paramètre. Vous devez stringify votre objet JSON pour résoudre le problème.
Ici est votre parfait Json que vous puissiez l'analyser.
Un autre piège qui peut entraîner
"SyntaxError: Unexpected token"
exception lors de l'appel deJSON.parse()
est à l'aide d'une des méthodes suivantes dans la chaîne de valeurs:Les caractères de nouvelle ligne.
Onglets (oui, les onglets que vous pouvez produire avec la touche Tab!)
Un stand-alone slash
\
(mais pour une raison pas/
, du moins pas sur Chrome.)(Pour une liste complète, voir la Chaîne de l'article ici.)
Par exemple, vous obtiendrez cette exception:
Donc il devrait être remplacé par:
Qui, je dois le dire, le rend tout à fait illisible en JSON format avec une plus grande quantité de texte.
Lorsque vous êtes à l'aide de POST ou PUT méthode, assurez-vous de stringify la partie du corps.
J'ai documenté un exemple ici
https://gist.github.com/manju16832003/4a92a2be693a8fda7ca84b58b8fa7154
Voici une fonction que j'ai faite sur la base de précédentes réponses: il fonctionne sur ma machine mais YMMV.
Vous devez chaîne json valide à https://jsonformatter.curiousconcept.com/
chaîne json valide doit avoir le double de devis.
pas de citer la cause de l'erreur
de devis unique cause de l'erreur
Si il y a les principaux ou les espaces, il sera invalide.
De fuite/espaces peuvent être supprimés en tant que
Source: http://www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html
J'espère que cela aide quelqu'un d'autre.
Mon problème était que j'avais commenté HTML en PHP en fonction de rappel via AJAX qui a été l'analyse des observations et retour invalid JSON.
Une fois que j'ai enlevé le commentaire HTML, tout était bon et le JSON a été analysée avec pas de problèmes.
La seule erreur que vous faites, vous êtes l'analyse déjà analysé objet donc, c'est jeter de l'erreur, l'utiliser et vous serez bon d'aller.
JS:
si vous souhaitez imprimer à l'ensemble du json puis utiliser JSON.stringify()
produits est un tableau qui peut être utilisé directement:
Maintenant, apparemment,
\r
,\b
,\t
,\f
, etc ne sont pas la seule problématique de caractères qui peut vous donner cette erreur.Noter que certains navigateurs peuvent avoir supplémentaires exigences pour l'entrée de
JSON.parse
.L'exécution de ce test de code sur votre navigateur:
Test sur Chrome, je vois qu'elle ne permet pas
JSON.parse(String.fromCharCode(0x22, x, 0x22));
oùx
est de 34, 92, ou de 0 à 31.Caractères 34 et 92 de la
"
et\
caractères respectivement, et ils sont généralement attendus et les échappées. C'est les caractères de 0 à 31, qui serait de vous donner des problèmes.Pour faciliter le débogage, avant de vous faire
JSON.parse(input)
, vérifiez d'abord que l'entrée ne contient pas de problématique de caractères:Pourquoi vous avez besoin de JSON.analyser? C'est déjà dans la gamme de format de l'objet.
Une meilleure utilisation de JSON.stringify comme ci-dessous :
var b = JSON.stringify(products);
Cela peut vous aider.
Oh man, des solutions dans toutes les réponses ci-dessus, à ce jour n'a pas fonctionné pour moi. J'ai eu un problème similaire, juste maintenant. J'ai réussi à le résoudre avec du papier d'emballage avec la citation. Voir la capture d'écran. Whoo.
Original:
JS:
L'erreur que vous obtenez c'est à dire "unexpected token o" est parce que json est prévu, mais l'objet est obtenu lors de l'analyse. Que le "o" est la première lettre du mot "objet".
Il peut se produire pour beaucoup de raisons, mais probablement pour un personnage invalide, de sorte que vous pouvez utiliser
JSON.stringify(obj);
qui feront de votre objet en JSON mais n'oubliez pas que c'est un JQUERY expression.J'ai ce message d'erreur PARCE que l'API a renvoyé l'objet json a été de donner UN message d'ERREUR (dans mon cas, le Code de l'Allumeur, retour html lorsque le code php ne parvient pas) donc CE n'EST PAS UN OBJET JSON.
Vérifier le SQL des Phrases et le code PHP, et de le tester avec le Facteur (ou d'une autre API testeur)
Utilisation
eval
. Il faut expression JavaScript/code en tant que chaîne et évalue/exécute.