qu'est-ce qui cause cette erreur sur la troisième ligne?
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
javascript
jquery
json
coiso
la source
la source
Réponses:
products
est un objet. (création à partir d'un objet littéral)JSON.parse()
est utilisé pour convertir une chaîne contenant une notation JSON en un objet Javascript.Votre code transforme l'objet en une chaîne (en appelant
.toString()
) afin d'essayer de l'analyser en tant que texte JSON.La valeur par défaut
.toString()
renvoie"[object Object]"
, qui n'est pas un JSON valide; d'où l'erreur.la source
.toString()
revient (selon les spécifications).Disons que vous savez que c'est du JSON valide mais que vous obtenez toujours ceci ...
Dans ce cas, il est probable qu'il y ait des caractères cachés / spéciaux dans la chaîne de n'importe quelle source que vous les obtenez. Lorsque vous les collez dans un validateur, ils sont perdus - mais dans la chaîne, ils sont toujours là. Ces caractères, bien qu'invisibles, se briseront
JSON.parse()
S'il
s
s'agit de votre JSON brut, nettoyez-le avec:la source
s = s.replace(/[\u0000-\u001F]+/g,"");
place des = s.replace(/[\u0000-\u0019]+/g,"");
, pour remplacer tous les caractères de contrôle. Droite?Il semble que vous vouliez stringifier l'objet. Alors fais ceci:
La raison de l'erreur est que
JSON.parse()
s'attend à uneString
valeur etproducts
est unArray
.Remarque: je pense qu'il tente
json.parse('[object Array]')
ce qui se plaint qu'il ne s'attendait pas à un jetono
après[
.la source
J'ai trouvé le même problème avec
JSON.parse(inputString)
.Dans mon cas, la chaîne d'entrée provient de la page de mon serveur [méthode de retour d'une page] .
J'ai imprimé le
typeof(inputString)
- c'était une chaîne, l'erreur se produit toujours.J'ai aussi essayé
JSON.stringify(inputString)
, mais cela n'a pas aidé.Plus tard, j'ai trouvé que c'était un problème avec l'opérateur de nouvelle ligne
[\n]
, à l'intérieur d'une valeur de champ.J'ai fait un remplacement [avec un autre caractère, remettre la nouvelle ligne après l'analyse] et tout fonctionne bien.
la source
JSON.parse attend une chaîne en paramètre. Vous devez stringifier votre objet JSON pour résoudre le problème.
la source
changer en
la source
JSON.parse
, les arguments doivent être une chaîne.JSON.parse(products.replace(/'/g, '"'))
Vous devez valider votre chaîne JSON ici .
Une chaîne JSON valide doit avoir des guillemets doubles autour des clés:
S'il n'y a pas de guillemets, cela provoquera une erreur:
L'utilisation de guillemets simples provoquera également une erreur:
la source
render ([key: value])
avec des guillemets simples, conduisant à l'erreur JSON parseError à la position 1 dans jquery Ajax.render (groovy.json.JsonOutput.toJson ([key:value]))
m'a aidé.S'il y a des espaces de début ou de fin, ce sera invalide. Les espaces de fin / de tête peuvent être supprimés comme
Source: http://www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html
la source
Voici votre Json parfait que vous pouvez analyser.
la source
Voici une fonction que j'ai créée sur la base des réponses précédentes: elle fonctionne sur ma machine mais YMMV.
la source
Un autre piège qui peut entraîner une
"SyntaxError: Unexpected token"
exception lors de l'appelJSON.parse()
utilise l'un des éléments suivants dans les valeurs de chaîne:Caractères de nouvelle ligne.
Onglets (oui, des onglets que vous pouvez produire avec la touche Tab!)
Toute barre oblique autonome
\
(mais pour une raison quelconque/
, du moins pas sur Chrome.)(Pour une liste complète, voir la section String ici .)
Par exemple, ce qui suit vous obtiendra cette exception:
Il devrait donc être remplacé par:
Ce qui, je devrais dire, le rend assez illisible au format JSON uniquement avec une plus grande quantité de texte.
la source
Lorsque vous utilisez la méthode POST ou PUT, assurez-vous de stringifier la partie du corps.
J'ai documenté un exemple ici https://gist.github.com/manju16832003/4a92a2be693a8fda7ca84b58b8fa7154
la source
Espérons que cela aide quelqu'un d'autre.
Mon problème était que j'avais commenté du HTML dans une fonction de rappel PHP via AJAX qui analysait les commentaires et renvoyait un JSON invalide.
Une fois que j'ai supprimé le HTML commenté, tout allait bien et le JSON a été analysé sans problème.
la source
products est un tableau qui peut être utilisé directement:
la source
Maintenant , semble - t -
\r
,\b
,\t
,\f
, etc ne sont pas les caractères seulement problématiques qui peuvent vous donner cette erreur.Notez que certains navigateurs peuvent avoir des exigences supplémentaires pour la saisie de
JSON.parse
.Exécutez ce code de test sur votre navigateur:
En testant sur Chrome, je vois qu'il ne permet pas
JSON.parse(String.fromCharCode(0x22, x, 0x22));
oùx
est 34, 92 ou entre 0 et 31.Les caractères 34 et 92 sont respectivement les caractères
"
et\
, et ils sont généralement attendus et correctement échappés. Ce sont les caractères 0 à 31 qui vous poseraient des problèmes.Pour faciliter le débogage, avant de le faire
JSON.parse(input)
, vérifiez d'abord que l'entrée ne contient pas de caractères problématiques:la source
Pourquoi avez-vous besoin de JSON.parse? C'est déjà dans un tableau de format objet.
Mieux vaut utiliser JSON.stringify comme ci-dessous:
var b = JSON.stringify(products);
Cela peut vous aider.
la source
Oh mec, les solutions dans toutes les réponses ci-dessus fournies jusqu'à présent n'ont pas fonctionné pour moi. J'ai eu un problème similaire tout à l'heure. J'ai réussi à le résoudre avec un emballage avec le devis. Voir la capture d'écran. Whoo.
Original:
la source
L'erreur que vous obtenez, c'est-à-dire "jeton inattendu o", est due au fait que json est attendu mais que l'objet est obtenu lors de l'analyse. Ce "o" est la première lettre du mot "objet".
la source
La seule erreur que vous faites est que vous analysez un objet déjà analysé, il génère donc une erreur, utilisez ceci et vous serez prêt à partir.
si vous voulez imprimer le json entier, utilisez JSON.stringify ()
la source
Cela peut arriver pour de nombreuses raisons, mais probablement pour un caractère invalide, vous pouvez donc l'utiliser
JSON.stringify(obj);
pour transformer votre objet en JSON, mais rappelez-vous qu'il s'agit d'une expression JQUERY.la source
J'ai cette erreur parce que l'API qui a renvoyé l'objet json donnait UNE ERREUR (dans mon cas, Code Igniter, renvoie un html lorsque le code php échoue) donc CE N'EST PAS UN OBJET JSON.
Vérifiez les phrases SQL et le code PHP, et testez-le avec Postman (ou un autre testeur d'API)
la source
L'erreur que je faisais était de passer
null
(sans le savoir) dans JSON.parse ().Alors ça a jeté
Unexpected token n in JSON at position 0
la source
Utilisez
eval
. Il prend l'expression / code JavaScript sous forme de chaîne et l'évalue / l'exécute.la source