JSON.parse erro inesperado de caractere

112

Eu recebo este erro:

JSON.parse: caráter inesperado

quando executo esta instrução no firebug:

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

Por que é tão? A string JSON parece correta para mim e também testei usando JSHint. O objeto passado no caso acima é uma resposta do servidor com o tipo de conteúdo definido comoapplication/json

Krishna
fonte

Respostas:

224

Você não está analisando uma string, está analisando um objeto já analisado :)

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
fonte
Eu quero votar positivamente para a primeira frase, mas por que você analisaria novamente?
Mathletics
1
@MarcelKorpel, Mathletics: Certo. Atualizada.
kennytm
@Mathletics Por todas as contas, JSON.parse faz algumas verificações de segurança. NT
BF
5
Isso é hilário. Adoro. <3
Darth Egregious
1
Estou ficando indefinido em data.results (os dados são um objeto JSON). Stack está me dizendo para torná-lo um objeto js por data = JSON.parse (data). Mas estou recebendo erro de caractere inesperado JSON.parse.
KasparTr
35

Você pode ter certeza de que o objeto em questão é stringificado antes de passá-lo para a função de análise simplesmente usando JSON.stringify().

Atualizou sua linha abaixo,

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

ou se você tiver JSON armazenado em alguma variável:

JSON.parse(JSON.stringify(yourJSONobject));
ScrapCode
fonte
3
JSON.stringify é o chefe.
Kenmeister
-1

Não é verdade para o OP, mas esse erro pode ser causado pelo uso de aspas simples ( ') em vez de double ( ") para strings.

A especificação JSON requer aspas duplas para strings.

Por exemplo:

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

dá o erro, enquanto

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

não. Observe as aspas ao redor myString.

Relacionado: https://stackoverflow.com/a/14355724/1461850

atomh33ls
fonte