Dada uma sequência de dados JSON, como posso transformar essa sequência com segurança em um objeto JavaScript?
Obviamente, eu posso fazer isso de maneira insegura com algo como:
var obj = eval("(" + json + ')');
mas isso me deixa vulnerável à string JSON que contém outro código, que parece muito perigoso simplesmente avaliar.
javascript
json
Matt Sheppard
fonte
fonte
eval
para analisar uma string JSON, porque você estaria expondo seu código a "injeção de código". Use emJSON.parse(yourString)
vez disso.Respostas:
JSON.parse(jsonString)
é uma abordagem JavaScript pura, desde que você possa garantir um navegador razoavelmente moderno.fonte
Requires document to be in IE8+ standards mode to work in IE8.
O método jQuery agora está obsoleto. Use este método:
Resposta original usando a funcionalidade jQuery obsoleta :
Se você estiver usando jQuery, basta usar:
É exatamente o que você está procurando (consulte a documentação do jQuery ).
fonte
jQuery.parseJSON
o padrão é usarJSON.parse
se ele existir, portanto, o único motivo para usá-lo sobre o real é se você precisar de um fallback para <IE7. Foi mudado caminho de volta em jQuery 1.6: james.padolsey.com/jquery/#v=1.6.0&fn=jQuery.parseJSONEsta resposta é para o IE <7; para navegadores modernos, verifique a resposta de Jonathan acima.
Esta resposta está desatualizada e a resposta de Jonathan acima (
JSON.parse(jsonString)
) agora é a melhor resposta .O JSON.org possui analisadores JSON para vários idiomas, incluindo quatro diferentes para JavaScript. Acredito que a maioria das pessoas consideraria o json2.js sua implementação goto.
fonte
Use o exemplo de código simples em " JSON.parse () ":
e revertendo:
fonte
Não tenho certeza sobre outras maneiras de fazer isso, mas veja como você faz isso no Prototype (tutorial JSON) .
Chamar
evalJSON()
com true como o argumento limpa a string de entrada.fonte
Este parece ser o problema:
Uma entrada que é recebida via Ajax websocket etc, e ela estará no formato String, mas você precisa saber se é
JSON.parsable
. O problema é que, se você sempre executá-loJSON.parse
, o programa PODE continuar "com êxito", mas você ainda verá um erro no console com o temido"Error: unexpected token 'x'"
.fonte
(function(){ postCookiesToHostileServer(); }());
coisas ainda mais desagradáveis no contexto do Node.Se você estiver usando jQuery , também poderá usar:
Então você pode fazer coisas como
etc.
fonte
O retorno de chamada recebe os dados retornados, que serão um objeto ou matriz JavaScript conforme definido pela estrutura JSON e analisados usando o
$.parseJSON()
métodofonte
Apenas por diversão, aqui está uma maneira de usar uma função:
fonte
eval
para fazer isso e não é seguro. : Peval
mas é mais complicado e mais difícil para os mantenedores entenderem.Usar
JSON.parse
é provavelmente o melhor caminho.Aqui está um exemplo de demonstração ao vivo .
fonte
A maneira mais fácil de usar o
parse()
método:Então você pode obter os valores dos elementos JSON, por exemplo:
Usando o jQuery, conforme descrito na
jQuery.parseJSON()
documentação:fonte
Tente usar o método com este objeto Data. ex:
Data='{result:true,count:1}
'Esse método realmente ajuda no Nodejs quando você está trabalhando com programação de porta serial
fonte
eval
ouFunction
é igualmente vulneráveisundefined; function bye() {...} bye();
Eu encontrei uma maneira "melhor":
No CoffeeScript:
Em Javascript:
fonte
A análise JSON é sempre uma dor. Se a entrada não for como o esperado, gera um erro e trava o que você está fazendo.
Você pode usar a pequena função a seguir para analisar com segurança sua entrada. Ele sempre transforma um objeto, mesmo que a entrada não seja válida ou já seja um objeto melhor na maioria dos casos:
fonte
Object.prototype.toString.call(input) === '[object Object]'
deve sertypeof input === 'object'
IMOnull
caso antes e uma matriz é um Objeto. Se você quiser testá-lo, você pode usarinstanceof
. Além disso, se você atribuir a essa função umArray
, ele será capturado ereturn def
quando poderia ter retornado a matriz perfeitamente fina.toString()
método para verificar se uma variável é um objeto ou não. Veja AngularJS , jQuery , sublinhados , ou mesmo devsjson.parse mudará para objeto.
fonte
Se tivermos uma string como esta:
então podemos simplesmente usar
JSON.parse
duas vezes para converter essa string em um objeto JSON:E podemos extrair valores do objeto JSON usando:
O resultado será:
fonte
JSON.parse()
converte qualquer string JSON passada na função em um objeto JSON.Para entender melhor, pressione F12para abrir "Inspect Element" no seu navegador e vá para o console para escrever os seguintes comandos:
Agora execute o comando:
Você obterá a saída como um objeto
{result: true, count: 1}
.Para usar esse objeto, você pode atribuí-lo à variável, talvez
obj
:Usando
obj
e o ponto (.
operador ), você pode acessar as propriedades do objeto JSON.Tente executar o comando:
fonte
Documentação oficial :
O
JSON.parse()
método analisa uma sequência JSON, construindo o valor ou o objeto JavaScript descrito pela sequência. Um opcionalreviver
função pode ser fornecida para executar uma transformação no objeto resultante antes que ele seja retornado.Sintaxe:
Parâmetros:
text
: A sequência a ser analisada como JSON. Consulte o objeto JSON para obter uma descrição da sintaxe JSON.reviver (optional)
: Se uma função, isso prescreve como o valor produzido originalmente pela análise é transformado, antes de ser retornado.Valor de retorno
O objeto correspondente ao texto JSON fornecido.
Exceções
Lança uma exceção SyntaxError se a sequência a ser analisada não for JSON válida.
fonte
Converter o objeto em JSON e, em seguida, analisá-lo, funciona para mim, como:
fonte
Analise a cadeia JSON
JSON.parse()
e os dados se tornarão um objeto JavaScript:Aqui, o JSON representa para processar o conjunto de dados JSON.
Imagine que recebemos este texto de um servidor web:
Para analisar em um objeto JSON:
Aqui
obj
está o respectivo objeto JSON que se parece com:Para buscar um valor, use o
.
operador:Converta um objeto JavaScript em uma string com
JSON.stringify()
.fonte
Apenas para a análise da capa para diferentes tipos de entrada
Analise os dados com JSON.parse () e os dados se tornam um objeto JavaScript.
Ao usar o JSON.parse () em um JSON derivado de uma matriz, o método retornará uma matriz JavaScript, em vez de um objeto JavaScript.
Objetos de data não são permitidos no JSON. Para datas, faça algo assim
Funções não são permitidas no JSON. Se você precisar incluir uma função, escreva-a como uma string.
fonte
Eu sei que pergunta anterior, porém ninguém percebe essa solução usando
new Function()
uma função anônima que retorna os dados.Apenas um exemplo:
Isso é um pouco mais seguro porque é executado dentro de uma função e não é compilado diretamente no seu código. Portanto, se houver uma declaração de função dentro dela, ela não será vinculada ao objeto de janela padrão.
Eu uso isso para 'compilar' as definições de configuração dos elementos DOM (por exemplo, o atributo de dados) simples e rápido.
fonte
Resumo:
Javascript (navegador e NodeJS) tem um
JSON
objeto interno . Sobre este objeto existem 2 métodos convenientes para lidar com elesJSON
. Eles são os seguintes:JSON.parse()
RecebeJSON
como argumento, retorna o objeto JSJSON.stringify()
Leva o objeto JS como argumento retorna oJSON
objetoOutras aplicações:
Além disso, por serem muito convenientes,
JSON
eles podem ser usados para outros meios. A combinação de ambos osJSON
métodos nos permite facilitar a criação de clones profundos de matrizes ou objetos. Por exemplo:fonte
Você também pode usar a
reviver
função para filtrar.Para mais informações, leia
JSON.parse
.fonte
JSON.parse é a maneira correta de converter uma string em um objeto, mas se a string analisada não for objeto ou se a string não estiver correta, ocorrerá um erro que fará com que o restante do código quebre. ideal para agrupar a função JSON.parse dentro de try-catch como
fonte
Tente isso. Este documento está escrito à máquina.
fonte
JSON.parse()
?fonte