Maison >interface Web >js tutoriel >La meilleure façon de convertir une chaîne JSON en objet JSON dans les compétences js_javascript

La meilleure façon de convertir une chaîne JSON en objet JSON dans les compétences js_javascript

WBOY
WBOYoriginal
2016-05-16 16:54:461638parcourir

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 :

Copier le code Le code 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 :
Copier le code Le code est tel. suit :
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 :
Copiez le code Le code est le suivant :

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.
Copier le code <.> Le code est le suivant :
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
Copier le code Le code est le suivant :
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 ')') ;

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