web-dev-qa-db-fra.com

syntaxe non interceptée: jeton inattendu U JSON

Je reçois le message d'erreur "Jeton inattendu de la syntaxe d'erreur non détectée de la syntaxe" lorsque je lance ma page en 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 de retour JSON 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"]
]
252
kinath_ru

Cette erreur est normalement observée lorsque la valeur donnée à JSON.parse est en fait undefined. Je voudrais donc vérifier le code qui tente de l'analyser - il est fort probable que vous n'analysiez pas la chaîne affichée ici.

571
Sean Kinsey

Je recevais ce message lors de la validation (dans le projet MVC) ..__ Pour moi, ajouter ValidationMessageFor element a résolu le problème.

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

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

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 modifie la manière dont id et/ou name sont générés en "remplaçant" le modèle par défaut avec 

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

puis en oubliant de changer ValidationMessageFor en

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

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

4

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 renvoyant null. Par conséquent, lorsque j'ai essayé d'accéder à une propriété, celle-ci a échoué. 

Donc, si vous faites quelque chose 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 la valeur null sur la valeur renvoyée de find sur JSONArray et en gérant les exceptions de manière appropriée.

Pensé que cela pourrait aider. 

1
SD1985

Dans mon cas, il essayait d'appeler JSON.parse () sur une variable AJAX avant la réponse XHR. PAR EXEMPLE:

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

Je remplace cela par un exemple hors du 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
delliottg

Juste en cas tu ne comprenais pas

c'est-à-dire, disons que j'ai une chaîne JSON. Pas encore d'objet JSON OR ARRAY.

donc si en javascript vous analysez 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;

Grandes réponses ci-dessus

0
Goodlife

Eh bien, pour tous ceux qui ne peuvent réellement trouver l’erreur nulle part dans votre code, ni "indéfini comme il est dit dans le stockage local ni nul" ... il vous suffit de commenter votre code et d’en écrire 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 redéfinir le précédent en le supprimant simplement de commentaires (si vous voulez supprimer t ... si vous le faites, vous pouvez le réécrire :)) 

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


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

La console affichera la valeur null et qu’elle réinitialisera votre code si t ne fonctionne pas, mec! Vous avez des erreurs.

Désolé pour mon anglais!

0
Nancy256

Le paramètre pour JSON.parse peut ne rien renvoyer (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é 

JSON.parse(xyz.intereface)

qui ne rapportait rien!

0
Kartik ganiga

Ce n'est pas une tâche difficile. Ce problème se produit aussi sur mon site, vous devriez avoir à décaler 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 à 

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