web-dev-qa-db-ja.com

JSONを解析して「予期しないトークンo」エラーが発生する

単純なJSON文字列の解析に問題があります。私は JSONLint でそれらをチェックしました、そしてそれはそれらが有効であることを示しています。しかし、JSON.parseまたはjQueryの代替手段を使用してそれらを解析しようとすると、エラー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>

注意:私はPHPでjson_encode()を使って文字列をエンコードしています。

382
Saurabh Sharma

あなたのデータはすでにオブジェクトです。解析する必要はありません。 JavaScriptインタプリタはすでにあなたのためにそれを解析しました。

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

解析してみてください。

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

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はすでにJSオブジェクトなので、解析する必要はありません。

10
Shuping

ただし、エラーの原因は、JSON文字列全体を引用符で囲む必要があることです。次のようにしてサンプルを修正します。

<!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>

他の回答者が述べたように、オブジェクトはすでにJSオブジェクトに解析されているので、解析する必要はありません。解析せずに同じことを実行する方法を説明するには、次のようにします。

<!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

応答は既に解析されています。もう一度解析する必要はありません。もう一度解析すると、 "unexpected token o"になります。文字列として取得する必要がある場合は、JSON.stringify()を使用できます。

6
msoliman

JQuery AJAXを使用してデータを送信したときも同じ問題がありました。

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

レスポンスがJSONであり、このメソッドを使用する場合、取得するデータはJavaScriptオブジェクトですが、dataType:"text"を使用する場合、dataはJSON文字列です。それなら$.parseJSONの使用は問題ありません。

5
Saber

私の(不完全な)コードは以前に実行され(live reload!)、特定のキー付きローカルストレージの値をunexpected token oではなく[object Object]に設定していたため、この{}エラーが発生しました。私が鍵を変更したときになって、期待通りに機能し始めました。あるいは、 これらの指示に従って、誤って設定されたlocalStorage値を削除することもできます

1
alexkb