web-dev-qa-db-fra.com

Analyse JSON générant une erreur "jeton inattendu o"

Je rencontre un problème d’analyse de chaînes JSON simples. Je les ai vérifiés sur JSONLint et cela indique qu'ils sont valides. Mais quand j'essaie de les analyser en utilisant soit JSON.parse ou l'alternative jQuery, cela me donne l'erreur unexpected token o:

<!doctype HTML>
<html>
  <head>
  </head>
  <body>
    <script type="text/javascript">
      var cur_ques_details ={"ques_id":15,"ques_title":"jlkjlkjlkjljl"};
      var ques_list = JSON.parse(cur_ques_details);

      document.write(ques_list['ques_title']);
    </script>
  </body>
</html>

Note: J'encode mes chaînes en utilisant json_encode() en PHP.

414
Saurabh Sharma

Vos données sont déjà un objet. Pas besoin de l'analyser. L'interpréteur javascript l'a déjà analysé pour vous.

var cur_ques_details ={"ques_id":15,"ques_title":"jlkjlkjlkjljl"};
document.write(cur_ques_details['ques_title']);
745
Dark Falcon

Essayez d'analyser si:

var yourval = jQuery.parseJSON(JSON.stringify(data));
70

Utiliser JSON.stringify(data);:

$.ajax({
    url: ...
    success:function(data){
        JSON.stringify(data); //to string
        alert(data.you_value); //to view you pop up
    }
});
13
Iyes boy

cur_ques_details est déjà un objet JS, vous n'avez pas besoin de l'analyser

10
Shuping

Toutefois, la source de votre erreur est que vous devez placer la chaîne JSON complète entre guillemets. Ce qui suit va réparer votre échantillon:

<!doctype HTML>
<html>
    <head>
    </head>
    <body>
        <script type="text/javascript">
            var cur_ques_details ='{"ques_id":"15","ques_title":"jlkjlkjlkjljl"}';
            var ques_list = JSON.parse(cur_ques_details);
            document.write(ques_list['ques_title']);
        </script>
    </body>
</html>

Comme l'ont mentionné d'autres personnes interrogées, l'objet est déjà analysé dans un objet JS, vous n'avez donc pas besoin de l'analyser. Pour montrer comment accomplir la même chose sans analyser, vous pouvez procéder comme suit:

<!doctype HTML>
<html>
<head>
</head>
    <body>
        <script type="text/javascript">
            var cur_ques_details ={"ques_id":"15","ques_title":"jlkjlkjlkjljl"};
            document.write(cur_ques_details.ques_title);
        </script>
    </body>
</html>
10
PlantationGator

La réponse est déjà analysée, vous n'avez pas besoin de l'analyser à nouveau. si vous le ré-analysez à nouveau, vous obtiendrez "unexpected token o". si vous avez besoin de l’obtenir sous forme de chaîne, vous pouvez utiliser JSON.stringify()

6
Muhammad Soliman

J'ai eu le même problème lorsque j'ai soumis des données à l'aide de jQuery AJAX:

$.ajax({
   url:...
   success:function(data){
      //server response's data is JSON
      //I use jQuery's parseJSON method 
      $.parseJSON(data);//it's ERROR
   }
});

Si la réponse est JSON et que vous utilisez cette méthode, les données que vous obtenez sont un objet JavaScript, mais si vous utilisez dataType:"text", les données sont une chaîne JSON. Ensuite, l'utilisation de $.parseJSON est acceptable.

5
Saber

Je voyais cette erreur unexpected token o parce que mon code (incomplet) avait déjà été exécuté (rechargement actif!) Et que la valeur de stockage local à clé particulière était définie sur [object Object] au lieu de {}. Ce n'est que lorsque j'ai changé de clé que les choses ont commencé à fonctionner comme prévu. Vous pouvez également suivre ces instructions pour supprimer la valeur localStorage définie de manière incorrecte .

1
alexkb