Разбор JSON, дающий ошибку "неожиданный токен"

У меня возникла проблема с анализом простых строк 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>

Примечание. Я кодирую свои строки с помощью json_encode() в PHP.

Ответ 1

Ваши данные уже являются объектом. Не нужно разбирать его. Интерпретатор javascript уже проанализировал его для вас.

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

Ответ 2

Попробуйте разобрать так:

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

Ответ 3

cur_ques_details уже является объектом JS, вам не нужно его анализировать

Ответ 4

Однако источником вашей ошибки является то, что вам нужно поместить полную строку 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>

Ответ 5

У меня была такая же проблема, когда я отправил данные с помощью jQuery AJAX:

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

Если ответом является JSON, и вы используете этот метод, данные, которые вы получаете, являются объектом JavaScript, но если вы используете dataType:"text", данные являются строкой JSON. Тогда использование $.parseJSON в порядке.

Ответ 6

Использование JSON.stringify(data);:

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

Ответ 7

Ответ уже разобран, вам не нужно его снова анализировать. если вы снова проанализируете его, он даст вам "unexpected token o". если вам нужно получить его как строку, вы можете использовать JSON.stringify()

Ответ 8

Я видел эту ошибку unexpected token o, потому что мой (неполный) код выполнялся ранее (live reload!) и задал конкретное ключевое значение локальной памяти [object Object] вместо {}. Только когда я сменил ключи, все началось, как и ожидалось. В качестве альтернативы вы можете следовать этим инструкциям, чтобы удалить неверно установленное значение localStorage.