327 votes

erreur de syntaxe inattendue jeton U JSON

J'obtiens cette erreur "uncaught syntaxerror unexpected token U" lorsque je lance ma page dans chrome. Et dans firefox, j'obtiens "JSON.parse : unexpected character". Je renvoie les données json à partir d'un fichier php et la chaîne json renvoyée est valide. Je l'ai vérifié avec http://jsonlint.com/ . Toute aide serait appréciée... Merci.

Voici la chaîne JSON renvoyée

[
    ["1","Pan Africa Market","\"1521 1st Ave, Seattle, WA\"","47.608941","-122.340145","restaurant"],
    ["2","The Melting Pot","14 Mercer St, Seattle, WA","47.624562","-122.356442","restaurant"],
    ["3","Ipanema Grill","1225 1st Ave, Seattle, WA","47.606366","-122.337656","restaurant"],
    ["4","Sake House","230 1st Ave, Seattle, WA","47.612825","-122.34567","bar"],
    ["5","Crab Pot","1301 Alaskan Way, Seattle, WA","47.605961","-122.34036","restaurant"],
    ["6","Mexican Kitchen","2234 2nd Ave, Seattle,WA","47.613975","-122.345467","bar"],
    ["7","Wingdome","1416 E Olive Way, Seattle, WA","47.617215","-122.326584","bar"],
    ["8","Piroshky Piroshky","1908 Pike pl, Seattle, WA","47.610127","-122.342838","restaurant"]
]

0 votes

Pouvez-vous afficher le JSON ? Lorsque j'obtiens cette erreur, cela signifie généralement qu'il y a une chaîne non terminée - elle indique qu'elle se trouve à la lettre 'U' dans le JSON.

0 votes

Il pourrait y avoir un problème étrange avec le \" dans la sortie.

0 votes

Ce JSON est bien analysé. Vous devriez essayer de comprendre ce qui bloque votre code.

707voto

Sean Kinsey Points 17117

Cette erreur est normalement constatée lorsque la valeur donnée à l'option JSON.parse est en fait undefined . Je vérifierais donc le code qui tente d'analyser cette chaîne - il est fort probable que vous n'analysiez pas la chaîne réelle indiquée ici.

37 votes

Il pourrait également être "undefined" comme une chaîne de caractères au lieu du littéral undefined . Je viens de passer 30 minutes à le découvrir.

14 votes

@ns47731 C'est en fait la même chose. La raison pour laquelle un indéfini actuel devient u c'est que undefined est transformé en une chaîne de caractères (parce qu'une chaîne de caractères est ce que JSON.parse attend).

10 votes

Ugh, j'ai envoyé une requête asynchrone et j'ai immédiatement essayé d'analyser le retour indéfini. Dégoûté de moi-même, merci.

14voto

user1412699 Points 1435

J'ai obtenu ce message lors de la validation (dans un projet MVC). Pour moi, en ajoutant ValidationMessageFor a réglé le problème.

Pour être précis, la ligne 43 de jquery.validate.unobtrusive.js est à l'origine du problème :

  replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;

12voto

Kartik ganiga Points 363

Le paramètre pour le JSON.parse peut ne rien retourner (c'est-à-dire que la valeur donnée pour le JSON.parse est undefined ) !

Cela m'est arrivé alors que j'analysais le code Solidity compilé à partir d'un fichier xyz.sol.

import web3 from './web3';
import xyz from './build/xyz.json';

const i = new web3.eth.Contract(
  JSON.parse(xyz.interface),
  '0x99Fd6eFd4257645a34093E657f69150FEFf7CdF5'
);

export default i;

qui a été mal orthographié comme

JSON.parse(xyz.intereface)

qui n'a rien donné !

5voto

LIUFA Points 3642

Le cas le plus courant où cette erreur se produit est l'utilisation d'un modèle qui génère le contrôle, puis la modification de la manière dont le contrôle est généré. id et/ou name sont générés en "surchargeant" le modèle par défaut avec quelque chose comme

@Html.TextBoxFor(m => m, new {Name = ViewData["Name"], id = ViewData["UniqueId"]} )

et ensuite oublier de changer ValidationMessageFor à

@Html.ValidationMessageFor(m => m, null, new { data_valmsg_for = ViewData["Name"] })    

J'espère que cela vous fera gagner du temps.

3voto

Goodlife Points 1525

Au cas où tu n'aurais pas compris.

Par exemple, disons que j'ai une STRING JSON, mais pas encore un OBJET JSON ou un ARRAY.

Donc, si en javascript, vous analysez la chaîne comme suit

var body={
  "id": 1,
  "deleted_at": null,
  "open_order": {
    "id": 16,
    "status": "open"}

var jsonBody = JSON.parse(body.open_order); //HERE THE ERROR NOW APPEARS BECAUSE THE STRING IS NOT A JSON OBJECT YET!!!! 
//TODO SO
var jsonBody=JSON.parse(body)//PASS THE BODY FIRST THEN LATER USE THE jsonBody to get the open_order

var OpenOrder=jsonBody.open_order;

Grandes réponses ci-dessus

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X