Непредвиденная ошибка символа 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.
kennytm
источник
Я хочу проголосовать за первое предложение, но зачем вам повторный синтаксический анализ?
Матлетика
1
@MarcelKorpel, Матлетика: Верно. Обновлено.
kennytm
@Mathletics По всем аккаунтам JSON.parse выполняет некоторую проверку безопасности. NT
BF
5
Это весело. Любить это. <3
Дарт Эгрегиос
1
Я получаю значение undefined для data.results (данные - это объект JSON). Стек говорит мне сделать его js-объектом с помощью data = 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));
ScrapCode
источник
3
JSON.stringify - главный.
Kenmeister
-1

Не верно для OP, но эта ошибка может быть вызвана использованием одинарных кавычек ( ') вместо double ( ") для строк.

Спецификация JSON требует двойных кавычек для строк.

Например:

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

дает ошибку, тогда как

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

не. Обратите внимание на кавычки вокруг myString.

Связанный: https://stackoverflow.com/a/14355724/1461850

atomh33ls
источник