Несподівана помилка символу JSON.parse


112

Я отримую цю помилку:

JSON.parse: несподіваний персонаж

коли я запускаю цю заяву в firebug:

JSON.parse({"balance":0,"count":0,"time":1323973673061,"firstname":"howard","userId":5383,"localid":1,"freeExpiration":0,"status":false});

Чому так? Рядок JSON здається мені правильним, і я також протестував його за допомогою JSHint. Переданий об'єкт у наведеному вище випадку - це відповідь сервера з типом вмісту, встановленим наapplication/json

Відповіді:


224

Ви не розбираєте рядок, ви аналізуєте вже проаналізований об'єкт :)

var obj1 = JSON.parse('{"creditBalance":0,...,"starStatus":false}');
//                    ^                                          ^
//                    if you want to parse, the input should be a string 

var obj2 = {"creditBalance":0,...,"starStatus":false};
// or just use it directly.

Я хочу подати заявку на перше речення, але навіщо ви повторно розбиратись?
Математика

1
@MarcelKorpel, Mathletics: Правильно. Оновлено.
kennytm

@Mathletics У всіх облікових записах JSON.parse перевіряє безпеку. NT
BF

5
Це весело. Любіть це. <3
Дарт Егрегійний

1
Мені не визначено даних data.results (дані є об'єктом JSON). Стек говорить мені, щоб він став об'єктом js за даними = JSON.parse (data). Але я отримую несподівану помилку символу JSON.parse.
KasparTr

35

Ви можете переконатися, що розглянутий об'єкт є розширеним, перш ніж передати його в функцію розбору, просто скориставшись JSON.stringify().

Оновіть рядок нижче,

JSON.parse(JSON.stringify({"balance":0,"count":0,"time":1323973673061,"firstname":"howard","userId":5383,"localid":1,"freeExpiration":0,"status":false}));

або якщо у вас зберігається JSON в якійсь змінній:

JSON.parse(JSON.stringify(yourJSONobject));

3
JSON.stringify - начальник.
Кенмайстер

-1

Не відповідає дійсності для ОП, але ця помилка може бути викликана використанням одних лапок ( ') замість подвійних ( ") для рядків.

Специфікація JSON вимагає подвійних лапок для рядків.

Наприклад:

JSON.parse(`{"myparam": 'myString'}`)

дає помилку, тоді як

JSON.parse(`{"myparam": "myString"}`)

не. Зверніть увагу на лапки навколо myString.

Пов’язано: https://stackoverflow.com/a/14355724/1461850

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