Eu tenho uma sequência em um aplicativo de servidor Java que é acessado usando AJAX. Parece algo como o seguinte:
var json = [{
"adjacencies": [
{
"nodeTo": "graphnode2",
"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"
}];
Quando a string é retirada do servidor, existe uma maneira fácil de transformar isso em um objeto JavaScript (ou matriz) ativo? Ou tenho que dividir manualmente a string e criar meu objeto manualmente?
Respostas:
Suporte para navegadores modernos
JSON.parse()
.Nos navegadores que não usam, você pode incluir a
json2
biblioteca .fonte
O ponto principal do JSON é que as seqüências JSON podem ser convertidas em objetos nativos sem fazer nada. Verifique este link
Você pode usar
eval(string)
ouJSON.parse(string)
.No entanto,
eval
é arriscado. Em json.org:fonte
Faça como o jQuery! (a essência)
Dessa forma, você não precisa de nenhuma biblioteca externa e ainda funciona em navegadores antigos.
fonte
eval()
.Para coletar todos os itens de uma matriz e retornar um objeto json
Para analisar os mesmos dados pelos quais passamos assim
fonte
Você também pode usar,
eval()
masJSON.parse()
é a maneira mais segura e fácil, então por que você usaria?bom e funciona
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
Por que é
eval
uma má ideia?Considere o seguinte exemplo.
Alguns terceiros ou usuários forneceram dados da string JSON.
Seu script do lado do servidor processa esses dados.
Usando
JSON.parse
:jogará:
A função não será executada.
Você está seguro.
Usando
eval()
: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?fonte
E se você também deseja que o objeto desserializado tenha funções, use minha pequena ferramenta: https://github.com/khayll/jsmix
fonte
Se você colar a string no lado do servidor no html, não precisará fazer nada:
Para java simples em jsp:
Para suportes de largura jsp:
fonte
Eu acho que isso deve ajudar:
Também as documentações também provam que você pode usar o require () para arquivos json: https://www.bennadel.com/blog/2908-you-can-use-require-to-load-json-javascript-object-notation-files -in-node-js.htm
fonte