JSON (JavaScript Object Notation), JavaScript Object Notation, est un format léger d'échange de données. Il est très pratique pour les programmeurs de traiter les données, et il est également pratique pour les machines d'analyser et de générer des données. Il est largement utilisé.
JSON est un format d'échange de données léger. L'intérieur d'un fichier au format JSON peut ressembler à ceci :
{ "name": "hanzichi", "sex": "male" }
On dirait que ce sont toutes des paires clé-valeur, très similaires aux objets js, n'est-ce pas ? C'est vrai, mais en même temps, JSON a exprimé son mécontentement. Je ne peux pas ressembler à l'objet js, je dois avoir ma propre personnalité, il est donc stipulé que les clés de la paire clé-valeur doivent utiliser des guillemets doubles ! Dans le même temps, il est stipulé qu'il existe certaines exigences concernant la valeur de la paire clé-valeur :
La valeur JSON peut être :
Nombre (entier ou virgule flottante)
Chaîne (entre guillemets)
Valeur logique (vrai ou faux)
Tableau (entre crochets)
Objet (entre accolades)
nul
À l'exception des 6 types ci-dessus, il n'y en a pas d'autres. Il n'y a pas d'indéfini ou de NAN comme js, et JSON refuse d'être utilisé.
Comment utiliser JSON ?
JSON se déplace généralement sous forme de chaînes pendant le processus d'interaction des données, donc pour js, la façon de convertir les chaînes json et les objets js les uns vers les autres est particulièrement importante.
Méthode d'évaluation (chaîne json -> objet js)
var jsonStr = '{"name": "hanzichi", "sex": "male"}'; var ans = eval('(' + jsonStr + ')'); console.log(ans.name, ans.sex); // hanzichi male
La fonction eval est très rapide, mais elle peut compiler n'importe quel code javascirpt, ce qui peut entraîner des problèmes de sécurité. L'utilisation de eval repose sur l'hypothèse que les paramètres du code entrant sont fiables. Dans certains cas, le client peut ne pas être fiable. Si cela est basé sur des considérations de sécurité, il est préférable d'utiliser un analyseur JSON. Un analyseur JSON n'acceptera que le texte JSON, il est donc plus sûr, comme suit.
JSON.parse(json字符串 -> js对象) var jsonStr = '{"name": "hanzichi", "sex": "male"}'; var obj = JSON.parse(jsonStr); console.log(typeof obj, obj); // object Object {name: "hanzichi", sex: "male"}
Le deuxième paramètre peut être une fonction, et la valeur peut être supprimée :
var jsonStr = '{"name": "hanzichi", "sex": "male", "age": 10}'; var obj = JSON.parse(jsonStr, function(key, value) { if(key === 'name') { return 'my name is ' + value; } return value; }); console.log(typeof obj, obj); // object Object {name: "my name is hanzichi", sex: "male", age: 10} JSON.stringify(js对象 -> json字符串) var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj); console.log(jsonStr); // {"name":"hanzichi","sex":"male","age":"10"}
Vous pouvez également ajouter un paramètre pour spécifier les attributs qui doivent être convertis en chaînes json (sous forme de tableau, seuls les attributs d'objet js portant le même nom que le tableau seront convertis) :
var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, ['name']); console.log(jsonStr); // {"name":"hanzichi"}
Le deuxième paramètre peut également être une fonction, qui peut supprimer l'attribut qui remplit les conditions (ou modifier la valeur de l'attribut. Aucun retour signifie abandonner l'attribut, et la valeur de return indique la valeur de la clé dans la chaîne json )
var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, function(key, value) { if(key === 'name') { return 'my name is ' + value; } return value; }); console.log(jsonStr); // {"name":"my name is hanzichi","sex":"male","age":"10"}
Il peut également y avoir un troisième paramètre, qui peut être un nombre ou une chaîne.
S'il s'agit d'un nombre, cela signifie une indentation. Si le nombre dépasse 10, il sera traité comme 10.
var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, null, 4); console.log(jsonStr); // { // "name": "hanzichi", // "sex": "male", // "age": "10" // }
peut également être une chaîne. Ces chaînes seront ajoutées devant les attributs en tant que préfixes. De même, si la longueur de la chaîne dépasse 10, seules 10 seront interceptées :
.var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, null, 'pre'); console.log(jsonStr); // { // pre"name": "hanzichi", // pre"sex": "male", // pre"age": "10" // }
J'ai une question ici. Je pense que le résultat devrait être sous la forme suivante...
{ "prename": "hanzichi", "presex": "male", "preage": "10" }
Si quelqu'un le sait, dites-le-moi s'il vous plaît...
Résumé
Bien sûr, le légendaire ie8 (et inférieur) ne peut pas utiliser les méthodes JSON.parse() et JSON.stringify() en raison de certains défauts, et eval() semble dangereux. Si vous souhaitez être compatible avec elles, vous devez le faire. peut faire référence à json2.js .
Le contenu ci-dessus vous donne une introduction à JSON et un résumé de son utilisation. J'espère qu'il vous sera utile !