erreur de syntaxe non capturée jeton inattendu U JSON


294

J'obtiens cette erreur "erreur de syntaxe non capturée, jeton inattendu U" lorsque j'exécute ma page dans Chrome. Et dans Firefox, je reçois, "JSON.parse: caractère inattendu". Je retourne les données json d'un fichier php et la chaîne json retournée est valide. Je l'ai vérifié avec http://jsonlint.com/ . Toute aide serait appréciée Merci.

Voici la chaîne JSON retourné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"]
]

Pouvez-vous publier le JSON? Lorsque j'obtiens cette erreur, cela donne généralement l'impression qu'il existe une chaîne non terminée - cela indique qu'elle se trouve à la lettre «U» dans le JSON.
Kyle Burton

Cela pourrait être un problème étrange avec \"la sortie.
Felix Kling

Ce JSON analyse bien. Vous devriez essayer de comprendre sur quoi votre code s'étouffe.
nneonneo

Réponses:


647

Cette erreur est normalement visible lorsque la valeur donnée à JSON.parseest réellement undefined. Donc, je vérifierais le code qui essaie d'analyser cela - très probablement, vous n'analysez pas la chaîne réelle affichée ici.


27
Il peut également s'agir "undefined"d'une chaîne au lieu du littéral undefined. Je viens de passer 30 minutes à le découvrir.
ug_

13
@ ns47731 C'est en fait la même chose. La raison pour laquelle un réel non défini devient u, est qu'il undefinedest contraint en une chaîne (car une chaîne est ce que JSON.parse attend).
Sean Kinsey

10
Ugh, envoyait une demande asynchrone et essayait immédiatement d'analyser le retour non défini. Dégoûté de moi-même, merci.
Chris Trudeau

7
Cette erreur serait également lancée via un UTF-8 {"au début de la chaîne json
metamagikum

1
Mon erreur était Unexpected token N in JSON at position...et le problème était une doublevaleur:NaN
Jaider

14

J'obtenais ce message lors de la validation (dans le projet MVC). Pour moi, l'ajout de l' élément ValidationMessageFor a résolu le problème.

Pour être précis, la ligne numéro 43 dans jquery.validate.unobtrusive.js a provoqué le problème:

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

Cela m'a mis sur la bonne voie; dans mon cas, je faisais $("form :input").valid();pour déclencher la validation. Mais apparemment, une erreur s'est produite sur un champ caché sans ValidationMessageFor. Corrigé en changeant pour$("form :input:visible").valid();
Trax72

7

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

Cela m'est arrivé pendant que j'analysais le code de solidité 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 ne retournait rien!


5

Le cas le plus courant de cette erreur se produit est d'utiliser un modèle qui génère le contrôle, puis de changer la manière idet / ou namesont générés en remplaçant le modèle par défaut avec quelque chose comme

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

puis oublier de passer ValidationMessageForà

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

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


3

J'ai rencontré cette erreur lorsque j'ai exécuté une condition de recherche sur un JSONArray dans une boucle for. Le problème que j'ai rencontré était le résultat d'une des valeurs de la boucle for retournant null. Par conséquent, lorsque j'ai essayé d'accéder à une propriété, cela a échoué.

Donc, si vous faites quoi que ce soit dans JSONArrays où vous n'êtes pas sûr de la source de données et de son intégrité, je pense que c'est une bonne habitude de traiter les exceptions nulles et non définies dans ce cas.

Je l'ai corrigé en vérifiant null sur la valeur retournée de find sur le JSONArray et en gérant les exceptions de manière appropriée.

J'ai pensé que cela pourrait aider.


1

Dans mon cas, il essayait d'appeler JSON.parse () sur une variable AJAX avant le retour de XHRResponse. PAR EXEMPLE:

var response = $.get(URL that returns a valid JSON string);
var data = JSON.parse(response.responseText);

J'ai remplacé cela par un exemple sur le site jQuery pour $ .get :

<script type="text/javascript"> 
    var jqxhr = $.get( "https://jira.atlassian.com/rest/api/2/project", function() {
          alert( "success" );
        })
          .done(function() {
//insert code to assign the projects from Jira to a div.
                jqxhr = jqxhr.responseJSON;
                console.log(jqxhr);
                var div = document.getElementById("products");
                for (i = 0; i < jqxhr.length; i++) {
                    console.log(jqxhr[i].name);
                    div.innerHTML += "<b>Product: " + jqxhr[i].name + "</b><BR/>Key: " + jqxhr[i].key + "<BR/>";
                }
                console.log(div);
            alert( "second success" );
          })
          .fail(function() {
            alert( "error" );
          })
          .always(function() {
            alert( "finished" );
          });

        // Perform other work here ...

        // Set another completion function for the request above
        jqxhr.always(function() {
          alert( "second finished" );
        });
</script>

1

Au cas où tu ne comprendrais pas

par exemple, cela signifie que j'ai une chaîne JSON .. PAS ENCORE UN OBJET OU UN RÉSEAU JSON.

donc si en javascript u analyser la chaîne comme

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;

Excellentes réponses ci-dessus


1

Cette réponse s'adresse aux personnes confrontées à cette erreur lors de l'utilisation de File Upload .

Nous utilisions un middleware pour le chiffrement basé sur des jetons - déchiffrement et nous avons rencontré la même erreur.

Voici notre code dans le fichier d'itinéraire:

  router.route("/uploadVideoMessage")
  .post(
    middleware.checkToken,
    upload.single("video_file"),
    videoMessageController.uploadVideoMessage
  );

ici, nous appelions le middleware avant la fonction de téléchargement et cela provoquait l'erreur. Donc, quand nous l'avons changé en cela, cela a fonctionné.

router.route("/uploadVideoMessage")
  .post(
    upload.single("video_file"),
    middleware.checkToken,
    videoMessageController.uploadVideoMessage
  );

0

Ce n'est pas une tâche difficile. Ce problème se produit également sur mon site, vous devriez avoir à déplacer vos fichiers js en ordre supérieur. Parce qu'à l'endroit où vous utilisez l'analyse JSON, cette fois, vos fichiers JS ne sont pas chargés. EXEMPLE #

<script type="text/javaScript">
...........SOME CODE.............
</script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

changer pour

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script type="text/javaScript">
...........SOME CODE.............
</script>

0

Eh bien, à tous ceux qui ne peuvent trouver l'erreur nulle part dans votre code, ni "non défini comme il est dit dans le stockage local, ni null" ... simplement commentez votre code et écrivez-en un autre qui supprime réellement l'élément dans le stockage local. .après cela, vous pouvez commenter ou supprimer le code actuel et réinitialiser à nouveau le précédent en le décommentant simplement (si vous ne supprimez pas t ... si vous l'avez fait, vous pouvez le réécrire :))

LocalStorage.setItem('Previous' , "removeprevious");  


LocalStorage.removeItem('Previous');   
 Console.log(LocalStorage.getItem('Previous'));

La console affichera null et qu'il .. réinitialise à nouveau votre code si cela ne fonctionne pas, mec! Vous avez des erreurs.

Désolé pour mon anglais!


-3

J'obtenais cette erreur, lorsque j'utilisais la même variable pour la chaîne json et json analysé:

var json = '{"1":{"url":"somesite1","poster":"1.png","title":"site title"},"2":{"url":"somesite2","poster":"2.jpg","title":"site 2 title"}}'

function usingjson(){
    var json = JSON.parse(json);
}

J'ai changé de fonction pour:

function usingjson(){
    var j = JSON.parse(json);
}

Maintenant, cette erreur a disparu.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.