o que causa esse erro na terceira linha?
var products = [{
"name": "Pizza",
"price": "10",
"quantity": "7"
}, {
"name": "Cerveja",
"price": "12",
"quantity": "5"
}, {
"name": "Hamburguer",
"price": "10",
"quantity": "2"
}, {
"name": "Fraldas",
"price": "6",
"quantity": "2"
}];
console.log(products);
var b = JSON.parse(products); //unexpected token o
Abra o console para visualizar o erro
javascript
jquery
json
coiso
fonte
fonte
Respostas:
products
é um objeto. (criando a partir de um literal de objeto)JSON.parse()
é usado para converter uma string contém a notação JSON em um objeto Javascript.Seu código transforma o objeto em uma string (chamando
.toString()
) para tentar analisá-lo como texto JSON.O padrão
.toString()
retorna"[object Object]"
, que não é JSON válido; daí o erro.fonte
.toString()
retorna (conforme as especificações).Digamos que você saiba que é JSON válido, mas você ainda está recebendo isso ...
Nesse caso, é provável que haja caracteres ocultos / especiais na string de qualquer fonte que você os obtenha. Quando você cola em um validador, eles são perdidos - mas na string eles ainda estão lá. Esses caracteres, enquanto invisíveis, vão quebrar
JSON.parse()
Se
s
é o seu JSON bruto, limpe-o com:fonte
s = s.replace(/[\u0000-\u001F]+/g,"");
vez des = s.replace(/[\u0000-\u0019]+/g,"");
, para substituir todos os caracteres de controle. Certo?Parece que você deseja restringir o objeto. Então faça o seguinte:
A razão do erro é que
JSON.parse()
espera umString
valor eproducts
é umArray
.Nota: Eu acho que tenta o
json.parse('[object Array]')
que reclama que não esperava tokeno
depois[
.fonte
Encontrei o mesmo problema com
JSON.parse(inputString)
.No meu caso, a string de entrada vem da minha página do servidor [retorno de um método de página] .
Eu imprimi o
typeof(inputString)
- era string, ainda assim o erro ocorre.Eu também tentei
JSON.stringify(inputString)
, mas não ajudou.Mais tarde, descobri que isso era um problema com o operador de nova linha
[\n]
, dentro de um valor de campo.Eu substituí [por algum outro personagem, coloque a nova linha de volta após a análise] e tudo está funcionando bem.
fonte
JSON.parse está aguardando uma String no parâmetro Você precisa especificar seu objeto JSON para resolver o problema.
fonte
mudar para
fonte
JSON.parse
, os argumentos devem ser uma string.JSON.parse(products.replace(/'/g, '"'))
Você deve validar sua string JSON aqui .
Uma cadeia JSON válida deve ter aspas duplas em torno das chaves:
Se não houver aspas, isso causará um erro:
O uso de aspas simples também causará um erro:
fonte
render ([key: value])
com aspas simples, levando ao JSON parseError na posição 1 no jquery Ajax.render (groovy.json.JsonOutput.toJson ([key:value]))
me ajudou.Se houver espaços à esquerda ou à direita, será inválido. Os espaços à direita / à esquerda podem ser removidos
Fonte: http://www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html
fonte
Aqui está o seu Json perfeito que você pode analisar.
fonte
Aqui está uma função que eu criei com base nas respostas anteriores: ela funciona na minha máquina, mas no YMMV.
fonte
Uma outra pegadinha que pode resultar em
"SyntaxError: Unexpected token"
exceção ao chamarJSON.parse()
está usando qualquer um dos seguintes itens nos valores da sequência:Caracteres de nova linha.
Guias (sim, guias que você pode produzir com a tecla Tab!)
Qualquer barra autônoma
\
(mas, por algum motivo/
, não , pelo menos não no Chrome).(Para uma lista completa, consulte a seção String aqui .)
Por exemplo, o seguinte exibirá essa exceção:
Portanto, deve ser alterado para:
O que, devo dizer, torna bastante ilegível no formato somente JSON, com maior quantidade de texto.
fonte
Quando você estiver usando o método POST ou PUT, certifique-se de especificar a parte do corpo.
Documentei um exemplo aqui https://gist.github.com/manju16832003/4a92a2be693a8fda7ca84b58b8fa7154
fonte
Espero que isso ajude outra pessoa.
Meu problema foi que eu havia comentado HTML em uma função de retorno de chamada PHP via AJAX que estava analisando os comentários e retornando JSON inválido.
Depois que removi o HTML comentado, tudo ficou bem e o JSON foi analisado sem problemas.
fonte
products é uma matriz que pode ser usada diretamente:
fonte
Agora, aparentemente
\r
,\b
,\t
,\f
, etc não são os caracteres única problemáticas que podem lhe dar esse erro.Observe que alguns navegadores podem ter requisitos adicionais para a entrada de
JSON.parse
.Execute este código de teste no seu navegador:
Testando no Chrome, vejo que ele não permite
JSON.parse(String.fromCharCode(0x22, x, 0x22));
ondex
estão 34, 92 ou de 0 a 31.Os caracteres 34 e 92 são
"
e\
caracteres respectivamente, e geralmente são esperados e escapam adequadamente. Os caracteres de 0 a 31 dão a você problemas.Para ajudar na depuração, antes de fazer
JSON.parse(input)
verificar, verifique primeiro se a entrada não contém caracteres problemáticos:fonte
Por que você precisa do JSON.parse? Já está na matriz do formato do objeto.
Melhor usar JSON.stringify como abaixo:
var b = JSON.stringify(products);
Isso pode ajudá-lo.
fonte
Oh, cara, as soluções em todas as respostas acima fornecidas até agora não funcionaram para mim. Eu tive um problema semelhante agora. Consegui resolvê-lo com a quebra da cotação. Veja a captura de tela. Whoo.
Original:
fonte
O erro que você está recebendo, ou seja, "token inesperado o" é porque json é esperado, mas o objeto é obtido durante a análise. Esse "o" é a primeira letra da palavra "objeto".
fonte
O único erro que você está cometendo é que você está analisando um objeto já analisado, então está lançando um erro, use isso e você estará pronto para prosseguir.
se você quiser imprimir json inteiro, use JSON.stringify ()
fonte
Isso pode acontecer por várias razões, mas provavelmente por um caractere inválido, para que você possa usar
JSON.stringify(obj);
isso transformará seu objeto em um JSON, mas lembre-se de que é uma expressão JQUERY.fonte
Eu tenho esse erro porque a API que retornou o objeto json estava dando um erro (no meu caso, o Code Igniter, retorne um html quando o código php falhar), portanto, NÃO É UM OBJETO JSON.
Verifique as sentenças SQL e o código PHP e teste-o com Postman (ou algum outro testador de API)
fonte
O erro que eu estava cometendo foi passar
null
cometendo (sem saber) para JSON.parse ().Então jogou
Unexpected token n in JSON at position 0
fonte
Use
eval
. Ele pega a expressão / código JavaScript como string e a avalia / executa.fonte