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.
La première méthode d'analyse : 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, renvoyée après la requête jQuery Le résultat est un objet json. Ce qui est considéré ici est la chaîne renvoyée par le serveur sous forme JSON. Pour les objets JSON encapsulés par des plug-ins tels que JSONObject, le processus est similaire et ne sera pas expliqué ici.
Le jeu de chaînes JSON est donné en premier ici. Le jeu de chaînes est le suivant :
var data = " {
root:
[
{nom : '1', valeur : '0'},
{nom : '6101', valeur : 'Pékin'} ,
{nom : '6102', valeur : 'Tianjin'},
{nom : '6103', valeur : 'Shanghai'},
{nom : '6104', valeur : 'Ville de Chongqing'},
{nom : '6105', valeur : 'Ville de Weinan'},
{nom : '6106', valeur : 'Ville de Yan'an'},
{nom : '6107' , valeur : 'Hanzhong City'},
{nom : '6108', valeur : 'Yulin City'},
{nom : '6109', valeur : 'Ankang City'},
{nom : '6110', valeur : 'Shangluo City'}
]
}
";
Ici sont basés sur les types de données obtenus de manière asynchrone par jQuery - objets json et chaînes, respectivement. Présenter les méthodes de traitement des résultats obtenus de deux manières.
1. Pour la chaîne JSON renvoyée par le serveur, si la requête asynchrone jQuery ne spécifie pas le type, ou ne l'accepte pas comme chaîne, alors elle doit être objectivée. la chaîne dans eval() est exécutée une fois. Cette méthode convient également pour obtenir des objets json dans la méthode JavaScript ordinaire. L'exemple suivant illustre :
var dataObj = eval("(" data ")"); // Convertir en objet json
Pourquoi devez-vous ajouter "("(" data " )");" à évaluer ?
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, prenez l'objet littéral {}. Si aucun crochet extérieur n'est ajouté, alors eval reconnaîtra les accolades comme les marques de début et de fin du bloc de code JavaScript, et {} sera considéré comme exécutant une instruction vide. Ainsi les deux résultats d'exécution suivants sont différents :
alert( eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
Pour cette méthode d'écriture, en JS , vous pouvez le voir partout.
Par exemple : (function(){})(); Lors des opérations de fermeture, etc.
alert(dataObj.root.length);//Afficher le nombre de sous-objets de root
$.each(dataObj.root, fonction(idx, item) {
if (idx == 0) {
return true;
}
//Afficher le nom et la valeur de chaque sous-objet racine
alert("name:" item.name ",value:" item.value);
})
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'eval () n'est pas nécessaire. Comme le résultat obtenu à ce moment est déjà un objet json, il vous suffit d'appeler l'objet directement. Ici, la méthode $.getJSON est utilisée comme exemple pour illustrer la méthode de traitement des données :
Copier le code Le code est le suivant :$.getJSON("http://blog.snsgou.com/", {param: "snsgou"}, function (data) {
// Les données renvoyées ici sont déjà un objet json
// Les autres opérations suivantes sont identiques au premier cas
$.each(data.root, function (index, item) {
if (index == 0) {
return true; // Identique à countinue, renvoyer false équivaut à break
}
alert("name:" item.name ",value:" item.value);
});
});
Ceci est spécial. Il convient de noter 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 : utilisez l'objet Function pour terminer. 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é.
La conclusion finale est :
chaîne json vers objet json, utilisez (new Function("return " jsonString))( au lieu de eval('(' jsonString ')') ;