Analiso alguns dados usando uma classe de tipo no meu controlador. Estou obtendo dados da seguinte maneira:
{
"data":{
"userList":[
{
"id":1,
"name":"soni"
}
]
},
"status":200,
"config":{
"method":"POST",
"transformRequest":[
null
],
"transformResponse":[
null
],
"url":"/home/main/module/userlist",
"headers":{
"rt":"ajax",
"Tenant":"Id:null",
"Access-Handler":"Authorization:null",
"Accept":"application/json, text/plain, */*"
}
},
"statusText":"OK"
}
Eu tentei armazenar os dados assim
var userData = _data;
var newData = JSON.parse(userData).data.userList;
Como posso extrair a lista de usuários para uma nova variável?
javascript
angularjs
json
Soniya Mohan
fonte
fonte
JSON.parse
. Tente usaruserData
diretamente como um objeto.console.log(typeof userData)
showsobject
, você já possui um objeto javascript e não uma string JSON que precisa analisar.Unexpected token o in JSON
, provavelmente você está tentando analisar um objeto que já está na forma analisada.Respostas:
O JSON que você postou parece bom, no entanto, no seu código, provavelmente não é mais uma sequência JSON, mas já é um objeto JavaScript. Isso significa que não é mais necessário analisar.
Você pode testar isso sozinho, por exemplo, no console do Chrome:
JSON.parse()
converte a entrada em uma string. OtoString()
método de objetos JavaScript por padrão retorna[object Object]
, resultando no comportamento observado.Tente o seguinte:
fonte
os primeiros parâmetros da função
JSON.parse
devem ser uma String e seus dados são um objeto JavaScript; portanto, eles serão convertidos em uma String[object object]
, você deve usarJSON.stringify
antes de passar os dadosfonte
Nunca use
JSON.parse
sem envolvê-lo emtry-catch
bloco:fonte
Logo acima
JSON.parse
, use:fonte
JSON.stringify()
converte um objeto JavaScript em uma representação de string dele, que é o oposto do queJSON.parse()
faz. Você estava entendendoSyntaxError
porque estava tentando analisar algo que já era um objeto. Na solução da @ Sukhchain, ela é convertida em uma string para evitar isso.JSON.parse()
muito redundantemente. Mesmo que seja um processo bastante rápido, a análise do JSON é feita de forma síncrona e pode potencialmente bloquear sua interface do usuário, por isso aconselho a não usá-lo. Em vez disso, você pode verificar se sua variável é um objeto, por exemplo, usandotypeof(userData) === 'object'
antes de tentar analisá-la.Bem, eu queria dizer que eu preciso analisar objeto como este:
var jsonObj = {"first name" : "fname"}
. Mas, na verdade não. Porque já é um JSON.fonte
Também podemos adicionar cheques como este:
fonte
Um erro inesperado de 'O' é gerado quando dados JSON ou String são analisados.
Se for string, já será stringfied. A análise acaba com o erro inesperado 'O'.
Enfrentei similar (embora em contexto diferente), resolvi o seguinte erro removendo o JSON Producer.
A resposta contém retorno de sequência "OK" . A anotação marcada como @Produces ({** MediaType.APPLICATION_JSON }) ** tenta analisar a sequência no formato JSON, o que resulta em 'O' inesperado .
A remoção de @Produces ({ MediaType.APPLICATION_JSON }) funciona bem. Saída: OK
Cuidado: Além disso, no lado do cliente, se você fizer uma solicitação ajax e usar JSON.parse ("OK"), ele lançará o token inesperado 'O'
O é a primeira letra da string
JSON.parse (objeto) se compara com jQuery.parseJSON (objeto);
JSON.parse ('{"name": "Yergalem", "city": "Dover"}'); --- Funciona bem
fonte