Maison  >  Article  >  interface Web  >  Analyse des précautions d'utilisation de eval pour analyser JSON dans les compétences JS_javascript

Analyse des précautions d'utilisation de eval pour analyser JSON dans les compétences JS_javascript

WBOY
WBOYoriginal
2016-05-16 15:32:251204parcourir

Cet article analyse en détail les précautions d'utilisation de eval pour analyser JSON dans JS. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Il existe généralement deux façons d'analyser les chaînes JSON au format de données JSON dans JS :

1. La première consiste à utiliser la fonction eval().

2. Utilisez l'objet Function pour effectuer une analyse de retour.

Utilisez la fonction eval pour analyser et utilisez la méthode each de jquery pour parcourir

Utilisez jquery pour analyser les données JSON. En tant qu'objet de transmission de la requête asynchrone jquery, le résultat renvoyé après la requête jquery est l'objet json. Ce qui est considéré ici est la forme de chaîne renvoyée par le serveur sous forme JSON pour l'encapsulation à l'aide du plug. -ins tels que JSONObject L'objet JSON est similaire à celui-ci et ne sera pas expliqué ici.

Le jeu de chaînes JSON est d'abord donné ici. Le jeu de chaînes est le suivant :

Le code est le suivant :

var data="
{
root:
[
{name:'1',value:'0'},
{name:'6101',value:'北京市'},
{name:'6102',value:'天津市'},
{name:'6103',value:'上海市'},
{name:'6104',value:'重庆市'},
{name:'6105',value:'渭南市'},
{name:'6106',value:'延安市'},
{name:'6107',value:'汉中市'},
{name:'6108',value:'榆林市'},
{name:'6109',value:'安康市'},
{name:'6110',value:'商洛市'}
]
}";

Sur la base des types de données obtenus de manière asynchrone par jquery - objets et chaînes json, nous introduisons ici les méthodes de traitement des résultats obtenus des deux manières.

1. Pour la chaîne JSON renvoyée par le serveur, si la requête asynchrone jquery n'a pas de description de type ou est acceptée comme chaîne, alors elle doit être objectivée. mettre la chaîne dans eval() est exécuté une fois. Cette méthode convient également pour obtenir des objets json à l'aide d'un javascipt ordinaire. Voici un exemple :

.
var dataObj=eval("("+data+")");//转换为json对象
Red rose为什么要 eval这里要添加 “("("+data+")");//”呢?

La raison est : le problème de l'évaluation elle-même. Puisque json commence et se termine par "{}", il sera traité comme un bloc d'instructions dans JS, il doit donc être forcé pour être converti en expression.

Le but de l'ajout de parenthèses est de forcer la fonction eval à convertir l'expression entre parenthèses en objet au lieu de l'exécuter en tant qu'instruction lors du traitement du code JavaScript. Par exemple, si le littéral d'objet {} n'est pas ajouté avec des crochets extérieurs, alors eval reconnaîtra les accolades comme marques de début et de fin du bloc de code JavaScript, et {} sera considéré comme exécutant une instruction vide. Les deux résultats d'exécution suivants sont donc différents :

alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

Ce type d'écriture peut être vu partout dans JS.

Par exemple : (function()) {}(); Lors d'opérations de fermeture, etc.

alert(dataObj.root.length);//输出root的子对象数量 
$.each(dataObj.root,fucntion(idx,item){ 
if(idx==0){ 
return true; 
} 
//输出每个root子对象的名称和值 
alert("name:"+item.name+",value:"+item.value); 
})

Remarque : pour que les js généraux génèrent des objets json, il vous suffit de remplacer la méthode $.each() par une instruction for, et les autres restent inchangées.

2. Pour la chaîne JSON renvoyée par le serveur, si la requête asynchrone jquery définit le type (généralement cet attribut de configuration) sur "json", ou utilise la méthode $.getJSON() pour obtenir le retour du serveur, alors là Il n'est pas nécessaire d'utiliser la méthode eval(), car le résultat obtenu à ce moment est déjà un objet json, il vous suffit d'appeler directement l'objet. Ici, la méthode $.getJSON est utilisée comme exemple pour illustrer la méthode de traitement des données :

$.getJSON("http://www.phpzixue.cn/",{param:"gaoyusi"},function(data){ 
//此处返回的data已经是json对象 
//以下其他操作同第一种情况 
$.each(data.root,function(idx,item){ 
if(idx==0){ 
return true;//同countinue,返回false同break 
} 
alert("name:"+item.name+",value:"+item.value); 
}); 
});

Ce qui nécessite une attention particulière ici, c'est que la méthode eval() de la méthode 1 exécute dynamiquement la chaîne (éventuellement un script js), ce qui peut facilement provoquer des problèmes de sécurité du système. Par conséquent, vous pouvez utiliser certaines bibliothèques de scripts client tierces qui contournent eval(). Par exemple, JSON en JavaScript fournit une bibliothèque de scripts ne dépassant pas 3 Ko.

La deuxième méthode d'analyse consiste à utiliser des objets Function. Son application typique est l'analyse des données renvoyées telles que le succès sous la méthode AJAX dans JQUERY

var json='{"name":"CJ","age":18}';
data =(new Function("","return "+json))();

Les données à ce moment sont un objet json qui sera analysé.

J'espère que cet article sera utile à tout le monde dans la programmation JavaScript.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn