необработанный синтаксис ошибки неожиданный токен U JSON

294

Я получаю эту ошибку «uncaught syntaxerror неожиданный токен U» при запуске моей страницы в Chrome. И в Firefox я получаю «JSON.parse: неожиданный персонаж». Я возвращаю данные json из php-файла, и возвращаемая строка json действительна. Я проверил это с http://jsonlint.com/ . Любая помощь будет оценена ... Спасибо.

Вот возвращенная строка JSON

[
    ["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"]
]
kinath_ru
источник
Можете ли вы опубликовать JSON? Когда я получаю эту ошибку, она обычно обнаруживает, что есть неоконченная строка - это указывает на то, что она находится в букве «U» в JSON.
Кайл Бертон
Может быть какая-то странная проблема с \"выводом.
Феликс Клинг
Это JSON разбирает нормально. Вы должны попытаться выяснить, что ваш код на самом деле задыхается.
nneonneo

Ответы:

647

Эта ошибка обычно видна, когда заданное значение JSON.parseдействительно undefined. Итак, я бы проверил код, который пытается разобрать это - скорее всего, вы не анализируете фактическую строку, показанную здесь.

Шон Кинси
источник
27
Это также может быть "undefined"как строка вместо литерала undefined. Я просто потратил 30 минут, чтобы выяснить это.
ug_
13
@ ns47731 Это на самом деле то же самое. Причина, по которой фактическое значение undefined становится u, заключается в том, что он undefinedприводится к строке (потому что строка - это то, что ожидает JSON.parse).
Шон Кинси
10
Тьфу, отправлял асинхронный запрос и сразу пытался проанализировать неопределенное возвращение. Отвращение к себе, спасибо.
Крис Трюдо
7
Эта ошибка также будет выдана через UTF-8 {"в начале строки json
metamagikum
1
Моя ошибка была, Unexpected token N in JSON at position...и проблема была в doubleзначении:NaN
Jaider
14

Я получал это сообщение во время проверки (в проекте MVC). Для меня добавление элемента ValidationMessageFor устранило проблему.

Чтобы быть точным, строка номер 43 в jquery.validate.unobtrusive.js вызвала проблему:

  replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;
user1412699
источник
Это привело меня на правильный путь; в моем случае я делал $("form :input").valid();для запуска проверки. Но, очевидно, он получил ошибку в скрытом поле без ValidationMessageFor. Исправлено путем изменения на$("form :input:visible").valid();
Trax72
7

Параметр для JSON.parse может ничего не возвращать (т. Е. Значение, указанное для JSON.parse undefined)!

Это случилось со мной, когда я анализировал скомпилированный код солидности из файла 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;

который был написан с ошибкой как

JSON.parse(xyz.intereface)

который ничего не возвращал!

Картик Ганига
источник
5

Наиболее распространенный случай возникновения этой ошибки - использование шаблона, который генерирует элемент управления, затем изменяет способ idи / или nameгенерируется путем переопределения шаблона по умолчанию чем-то вроде

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

а затем забыть изменить ValidationMessageForк

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

Надеюсь, это сэкономит вам время.

Матас Вайткявичюс
источник
3

Я столкнулся с этой ошибкой, когда запустил условие поиска для JSONArray в цикле for. Проблема, с которой я столкнулся, была результатом того, что одно из значений в цикле for вернуло значение null. Следовательно, когда я пытался получить доступ к свойству, это не удалось.

Поэтому, если вы делаете что-то в JSONArrays, где вы не уверены в источнике данных и его целостности, я считаю хорошей привычкой иметь дело с нулевыми и неопределенными исключениями в этом случае.

Я исправил это, проверив значение null в возвращаемом значении find в JSONArray и обработав исключения соответствующим образом.

Мысль это может помочь.

SD1985
источник
1

В моем случае он пытался вызвать JSON.parse () для переменной AJAX до возвращения XHRResponse. НАПРИМЕР:

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

Я заменил это на пример с сайта jQuery для $ .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>
delliottg
источник
1

Просто если ты не понял

Например, это говорит о том, что у меня есть JSON STRING .. НЕ ИМЕЕТ ОБЪЕКТ JSON ИЛИ Массив.

так что если в JavaScript вы анализируете строку как

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;

Отличные ответы выше

Хорошая жизнь
источник
1

Этот ответ, если для людей, которые сталкиваются с этой ошибкой при работе с File Upload ..

Мы использовали промежуточное программное обеспечение для шифрования на основе токенов - дешифрование, и мы столкнулись с той же ошибкой.

Ниже был наш код в файле маршрута:

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

здесь мы вызывали промежуточное программное обеспечение перед загрузкой, и это вызывало ошибку. Поэтому, когда мы изменили это на это, это сработало.

router.route("/uploadVideoMessage")
  .post(
    upload.single("video_file"),
    middleware.checkToken,
    videoMessageController.uploadVideoMessage
  );
Кушал Парих
источник
0

Это не сложная задача. Эта проблема также возникает на моем сайте, вам нужно сдвинуть ваши файлы js в верхнем порядке. Потому что в том месте, где вы используете JSON Parsing, на этот раз ваши файлы JS не загружаются. ПРИМЕР #

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

изменить на

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script type="text/javaScript">
...........SOME CODE.............
</script>
Mk Mughal
источник
0

Ну, для всех, кто на самом деле не может найти ошибку где-либо в вашем коде, ни «неопределенная, как говорится в локальном хранилище, ни null» ... просто закомментируйте ваш код и напишите другой, который фактически удаляет элемент в локальном хранилище. После этого вы можете прокомментировать или удалить текущий код и снова сбросить предыдущий, просто раскомментировав его (если вы не удалите его ... если вы это сделали, вы можете написать его снова :))

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


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

Консоль покажет ноль и что она ... сбросит ваш код снова, если t не работает, чувак! Вы получили ошибки.

Извините за мой английский!

Nancy256
источник
-3

Я получал эту ошибку, когда я использовал ту же переменную для строки JSON и проанализировал JSON:

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);
}

Я изменил функцию на:

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

Теперь эта ошибка ушла.

user2605603
источник