J'ai regardé sur wikipedia et Googlé et lu la documentation officielle, mais je ne suis toujours pas arrivé au point où je comprends vraiment ce qu'est JSON, et pourquoi je l'utiliserais.
Je construis des applications en utilisant PHP, MySQL et Javascript / HTML depuis un certain temps, et si JSON peut faire quelque chose pour me faciliter la vie, améliorer mon code ou mon interface utilisateur, alors j’aimerais le savoir. Quelqu'un peut-il me donner une explication succincte ?
JSON (JavaScript Object Notation) est un format léger utilisé pour l'échange de données. Il est basé sur un sous-ensemble du langage JavaScript (la façon dont les objets sont construits en JavaScript). Comme [indiqué dans le MDN][1], une partie de JavaScript n'est pas JSON, et une partie de JSON n'est pas JavaScript. Les réponses aux services Web en sont un exemple. À l'époque, les services Web utilisaient XML comme principal format de données pour renvoyer les données, mais depuis l'apparition de JSON (Le format JSON est spécifié dans [RFC 4627][2] par Douglas Crockford), il est le format préféré car il est beaucoup plus léger. Vous pouvez trouver beaucoup plus d'informations sur le [site web JSON] officiel [3]. Le format JSON repose sur deux structures :
[ ![Diagramme d'objets JSON][4]][5]
[ ![Diagramme de tableau JSON][6]][7]
[ ![Diagramme de valeur JSON][8]][9]
[ ![Diagramme de chaîne JSON][10]][11]
[ ![diagramme de nombres JSON][12]][13]
Voici un exemple de données JSON :
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
var x = {x:y}
n'est pas JSON, c'est un objet Javascript. Les deux ne sont pas la même chose. L'équivalent JSON (représenté dans le langage Javascript) serait var x = '{"x":"y"}'
. x
est un objet de type chaîne et non un objet à part entière. Pour transformer cet objet en un objet Javascript à part entière, vous devez d'abord l'analyser, var x = JSON.parse('{"x":"y"}' ;);
, x
est maintenant un objet mais ce n'est plus JSON.
Voir Javascript object Vs JSONLorsque vous travaillez avec JSON et JavaScript, vous pouvez être tenté d'utiliser la fonction eval
pour évaluer le résultat retourné dans le callback, mais ce n'est pas conseillé car il y a deux caractères (U+2028 & ; U+2029) valides dans JSON mais pas dans JavaScript (lisez plus à ce sujet [ici][15]).
Par conséquent, il faut toujours essayer d'utiliser le script de Crockford qui vérifie si le JSON est valide avant de l'évaluer. Le lien vers l'explication du script se trouve [ici][16] et voici un [lien direct][17] vers le fichier js. Tous les principaux navigateurs disposent aujourd'hui de leur propre implémentation pour cette fonction.
Exemple d'utilisation de l'analyseur JSON (avec le json de l'extrait de code ci-dessus) :
//The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
//Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the json example)
alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};
Le parseur JSON offre également une autre méthode très utile, stringify
. Cette méthode accepte un objet JavaScript comme paramètre, et renvoie une chaîne au format JSON. Ceci est utile lorsque vous voulez renvoyer des données au serveur:
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
parse
et stringify
) prennent également un second paramètre, qui est une fonction qui sera appelée pour chaque clé et valeur à chaque niveau du résultat final, et chaque valeur sera remplacée par le résultat de votre fonction entrée. (Plus d'informations à ce sujet [ici][16])
Par ailleurs, pour tous ceux qui pensent que JSON est réservé à JavaScript, consultez [cet article][19] qui explique et confirme le contraire.JSON est la notation des objets JavaScript. Il s'agit d'un moyen beaucoup plus compact que le XML pour transmettre des ensembles de données sur des connexions réseau. Je suggère d'utiliser JSON dans toutes les applications de type AJAX où XML serait autrement l'option "recommandée". La verbosité du XML augmente le temps de téléchargement et la consommation de bande passante ($$$). Vous pouvez obtenir le même effet avec JSON et son balisage est presque exclusivement consacré aux données elles-mêmes et non à la structure sous-jacente.
La réponse courte et commune est la suivante : si vous utilisez AJAX pour effectuer des requêtes de données, vous pouvez facilement envoyer et retourner des objets sous forme de chaînes JSON. Les extensions disponibles pour Javascript supportent les appels toJSON() sur tous les types de javascript pour envoyer des données au serveur dans une requête AJAX. Les réponses AJAX peuvent renvoyer des objets sous forme de chaînes JSON qui peuvent être converties en objets Javascript par un simple appel eval, par exemple si la fonction AJAX someAjaxFunctionCallReturningJson renvoie
"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"
vous pourriez écrire en Javascript
var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);
JSON peut également être utilisé pour les charges utiles des services web et autres, mais il est vraiment pratique pour les résultats AJAX.