Você também pode usar, eval()
mas JSON.parse()
é a maneira mais segura e fácil, então por que você usaria?
bom e funciona
var yourJsonObject = JSON.parse(json_as_text);
Não vejo nenhuma razão para você preferir usar eval
. Isso apenas coloca seu aplicativo em risco.
Dito isto - isso também é possível.
ruim - mas também funciona
var yourJsonObject = eval(json_as_text);
Por que é eval
uma má ideia?
Considere o seguinte exemplo.
Alguns terceiros ou usuários forneceram dados da string JSON.
var json = `
[{
"adjacencies": [
{
"nodeTo": function(){
return "delete server files - you have been hacked!";
}(),
"nodeFrom": "graphnode1",
"data": {
"$color": "#557EAA"
}
}
],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode1",
"name": "graphnode1"
},{
"adjacencies": [],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode2",
"name": "graphnode2"
}]
`;
Seu script do lado do servidor processa esses dados.
Usando JSON.parse
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = JSON.parse(json)[0].adjacencies[0].nodeTo;
}
jogará:
Uncaught SyntaxError: Unexpected token u in JSON at position X.
A função não será executada.
Você está seguro.
Usando eval()
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = eval(json)[0].adjacencies[0].nodeTo;
}
executará a função e retornará o texto.
Se eu substituir essa função inofensiva por uma que remova arquivos da pasta do site, você foi invadido. Nenhum erro / aviso será lançado neste exemplo.
Você não está seguro.
Consegui manipular uma sequência de texto JSON para que ela funcione como uma função que será executada no servidor.
eval(JSON)[0].adjacencies[0].nodeTo
espera processar uma string JSON, mas, na realidade, acabamos de executar uma função em nosso servidor.
Isso também pode ser evitado se verificarmos no servidor todos os dados fornecidos pelo usuário antes de passá-los para uma eval()
função, mas por que não usar a ferramenta integrada para analisar o JSON e evitar todo esse problema e perigo?