несподіваний синтаксис несподіваний маркер U JSON


293

Я отримую цю помилку "неприхований синтаксис несподіваний маркер U", коли запускаю сторінку в хромі. І в 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"]
]

Чи можете ви розмістити JSON? Коли я отримую цю помилку, вона, як правило, визначає, що існує нерозривна рядок - це вказує на те, що вона є на букві "U" в JSON.
Кайл Бертон

Може бути якась дивна проблема з \"виходом.
Фелікс Клінг

Цей JSON добре розбирає. Спробуйте розібратися, чим насправді задихається ваш код.
nneonneo

Відповіді:


646

Ця помилка, як правило, помічається, коли значення, що надається, JSON.parseє фактично undefined. Отже, я перевірив би код, який намагається проаналізувати це - швидше за все, ви не розбираєте фактичний рядок, показаний тут.


27
Це також може бути "undefined"як рядок замість прямої undefined. Я щойно витратив 30 хвилин на пошук цього.
ug_

13
@ ns47731 Це насправді те саме. Причиною того, що стає фактичним невизначеним 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;

Це привело мене до правильного шляху; у моєму випадку я робив, $("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 return return null. Отже, коли я намагався отримати доступ до власності, це не вдалося.

Отже, якщо ви робите що-небудь в межах JSONArrays, де ви не впевнені у джерелі даних та його цілісності, я вважаю, що в цьому випадку є доброю звичкою боротися з нульовими та невизначеними винятками.

Я виправив це, перевіривши на нуль повернене значення знаходження на JSONArray та обробляючи винятки належним чином.

Думав, що це може допомогти.


1

У моєму випадку він намагався викликати JSON.parse () на змінній AJAX до повернення XHRResponse. EG:

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>

1

Просто випадок, коли ви не зрозуміли

Наприклад, це скажемо, що у мене є JSON STRING.

тож якщо у javascript u розібрати рядок як

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

Ця відповідь, якщо для людей, які стикаються з цією помилкою під час роботи з завантаженням файлів ..

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

У файлі маршруту був наш код:

  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>

0

Ну, а всім, хто насправді не може знайти помилку ніде у вашому коді, ні "не визначено, як це написано в локальному сховищі, ні нульове" .. просто просто прокоментуйте свій код і напишіть ще один, який фактично видаляє елемент у локальному сховищі. після цього, ви можете коментувати або видаляти поточний код і знову скинути попередній, просто відменюючи його (якщо u dint delet t ... якщо ви зробили, можете написати його знову :))

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


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

Консоль покаже нуль, і вона .. відновить код ще раз, якщо т не працює, чувак! У тебе помилки.

Вибачте за мою англійську!


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

Тепер ця помилка пішла.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.