web-dev-qa-db-fra.com

Qu'est-ce que JSON et pourquoi devrais-je l'utiliser?

J'ai regardé sur wikipedia et googlé et lu la documentation officielle, mais je n'ai toujours pas compris à quel point je comprenais vraiment ce qu'est JSON et pourquoi je l'utilisais.

Je construis depuis un certain temps des applications utilisant PHP, MySQL et Javascript/HTML. Si JSON peut faire quelque chose pour me simplifier la vie, améliorer mon code ou améliorer mon interface utilisateur, alors j'aimerais le savoir. Quelqu'un peut-il me donner une explication succincte?

518
Ben

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 (mode de construction des objets). en JavaScript). Comme indiqué dans le MDN , certains JavaScript n'est pas JSON et d'autres JSON n'est pas JavaScript.

Les réponses aux services Web constituent un exemple d'utilisation de cette option. A l'époque, les services Web utilisaient XML comme format de données principal pour la transmission de données en retour, mais depuis l'apparition de JSON (), le format JSON est spécifié dans RFC 4627 par Douglas. Crockford ), il a été le format préféré car il est beaucoup plus léger

Vous pouvez trouver beaucoup plus d’informations sur le site officiel site Web JSON .

JSON est construit sur deux structures:

  • Une collection de paires nom/valeur. Dans différentes langues, ceci est réalisé sous forme d'objet, d'enregistrement, de structure, de dictionnaire, de table de hachage, de liste à clé ou de tableau associatif.
  • Une liste ordonnée de valeurs. Dans la plupart des langues, cela est réalisé sous forme de tableau, de vecteur, de liste ou de séquence.

Structure JSON



JSON Object diagram

JSON Array diagram

JSON Value diagram

JSON String diagram

JSON Number diagram

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"
     ]
 }

JSON en JavaScript

JSON (en Javascript) est une chaîne!

Les gens supposent souvent que tous les objets Javascript sont du JSON et que JSON est un objet Javascript. Ceci est une erreur.

En Javascript var x = {x:y} est pas JSON , il s’agit d’un objet en 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 ceci 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 du JSON.

Voir objet Javascript contre JSON


Lorsque vous utilisez JSON et JavaScript, vous pouvez être tenté d’utiliser la fonction eval pour évaluer le résultat renvoyé dans le rappel, mais cela n’est pas suggéré, car il existe deux caractères (U + 2028 et U + 2029) valides JSON mais pas en JavaScript (lisez plus de ceci ici ).

Par conséquent, il faut toujours essayer d'utiliser le script de Crockford qui recherche un JSON valide avant de l'évaluer. Un lien vers l'explication du script est trouvé ici et voici un lien direct vers le fichier js. Aujourd'hui, tous les principaux navigateurs ont leur propre implémentation pour cela.

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'
};

L'analyseur JSON propose également une autre méthode très utile, stringify. Cette méthode accepte un objet JavaScript en tant que 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}

Les deux méthodes ci-dessus (parse et stringify) prennent également un deuxième paramètre, fonction qui sera appelée pour chaque clé et valeur à chaque niveau du résultat final, et chaque valeur sera remplacée. par résultat de votre fonction entrée. (Plus sur ceci ici )

Au fait, pour tous ceux qui pensent que JSON est juste pour JavaScript, jetez un œil à cet article ça explique et confirme le contraire.


Références

629
Andreas Grech

Le concept expliqué - Pas de code ni de jargon technique

Qu'est-ce que JSON? - Comment je l'ai expliqué à ma femmeTM

Me: "C’est fondamentalement une façon de communiquer avec quelqu'un par écrit ... mais avec des règles.

épouse: ouais ....?

ME: Prenons l'anglais comme exemple: nous avons des règles - des points, des virgules, des crochets, des traits d'union, des apostrophes, etc., qui ont toutes une signification différente. Au fond, nous avons tous convenu de ce qu’est un arrêt complet (c’est-à-dire qu’il faut faire une pause quand on en lit un).

Wife: Vous dites donc que JSON est une façon d'écrire l'anglais à quelqu'un, mais qu'il a des règles sur lesquelles les deux parties sont d'accord?

moi: Exactement! Sauf que ces règles sont très spécifiques. En anglais prosaïque, les règles sont assez floues, comme avec le combat en cage: vous pouvez faire ce que vous voulez, à l'exception de quelques bases (par exemple, l'esclavage des yeux). Par exemple, si je voulais parler de notre famille à l'IRS, je pourrais le faire de différentes manières en utilisant un anglais prosaïque. Notez les différences dans les deux sens:

moi:

• Exemple 1: Notre famille compte 4 personnes: vous, moi et 2 enfants.

• Exemple 2: Notre famille: vous, moi, enfant1 et enfant2.

• Exemple 3: Famille: [vous, moi, enfant1, enfant2]

• Exemple 4: nous avons 4 personnes dans notre famille: maman, papa, enfant1 et enfant2.

Femme: Ok Je comprends la photo. Vous pouvez dire la même chose de nombreuses manières différentes en anglais. Vous pouvez ajouter quelques mots ici et là, quelques virgules ici et là et tout le monde comprendra encore.

Me: Exactement. Sauf en JSON, les règles sont très restrictives. Vous ne pouvez communiquer que d'une certaine manière. Et vous devez suivre ces règles pour que quelqu'un d'autre le comprenne: crochets, virgules à certains endroits.

Wife: Pourquoi n’utilisent-ils pas un anglais simple à la place?

Moi: Ils le feraient, mais n’oubliez pas que nous avons affaire à des ordinateurs. Un ordinateur est stupide et ne pourra pas comprendre les phrases. Nous devons donc être très spécifiques lorsque des ordinateurs sont impliqués, sinon ils sont confus. De plus, JSON est un moyen de communication assez efficace, de sorte que la plupart des éléments non pertinents sont supprimés, ce qui est joli. Si vous souhaitez communiquer notre famille à un ordinateur, vous pouvez le faire de la manière suivante:

{
                "Family" :  ["Me", "Wife", "Kid1", "Kid2"] 
}

…… et c'est fondamentalement JSON. Mais rappelez-vous que vous DEVEZ obéir aux règles de grammaire JSON. Si vous enfreignez ces règles, un ordinateur ne comprendra tout simplement pas (c.-à-d. Analyser) ce que vous écrivez.

Wife: Alors, comment puis-je écrire en Json?

Me: Lisez les réponses ci-dessus pour plus de détails. En bref, vous êtes obligé de communiquer des choses en utilisant des paires clé-valeur et des tableaux.

Résumé

JSON est fondamentalement un moyen de communiquer des données à quelqu'un, avec des règles très très spécifiques. Utiliser des paires de valeurs clés et des tableaux. C'est le concept expliqué, à ce stade, il convient de lire les règles spécifiques ci-dessus.

54
BKSpurgeon

En bref, JSON est un moyen de sérialiser de telle sorte qu'il devienne du code JavaScript. Lorsqu'il est exécuté (avec eval ou autrement), ce code crée et retourne un objet JavaScript contenant les données que vous avez sérialisées. Ceci est disponible car JavaScript permet la syntaxe suivante:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

Vous pouvez l'utiliser à plusieurs fins. D'une part, c'est un moyen pratique de transmettre les données de votre serveur sur votre code JavaScript. Ainsi, cela est souvent utilisé dans AJAX.

Vous pouvez également l'utiliser comme mécanisme de sérialisation autonome, ce qui est plus simple et prend moins de place que XML. Il existe de nombreuses bibliothèques qui vous permettent de sérialiser et de désérialiser des objets en JSON pour différents langages de programmation.

48
Vilx-

En bref, il s’agit d’une notation de script pour la transmission de données. D'une certaine manière, une alternative au XML, prenant en charge de manière native les types de données de base, les tableaux et les tableaux associatifs (paires nom-valeur, appelées Objets car c'est ce qu'elles représentent).

La syntaxe est celle utilisée dans JavaScript et JSON lui-même signifie "JavaScript Object Notation". Cependant, il est devenu portable et est également utilisé dans d'autres langues.

Un lien utile pour les détails est ici:

http://secretgeek.net/json_3mins.asp

31
mson

Le format JSON est souvent utilisé pour la sérialisation et la transmission de données structurées via une connexion réseau. Il est principalement utilisé pour transmettre des données entre un serveur et une application Web, en guise d'alternative à XML.

19
Pinakin Nayi

JSON est la notation d'objet JavaScript. Il s'agit d'un moyen beaucoup plus compact de transmission d'ensembles de données via des connexions réseau par rapport au XML. Je suggère que JSON soit utilisé dans toutes les applications de type AJAX où XML serait l'option "recommandée". La verbosité de XML augmentera le temps de téléchargement et augmentera la consommation de bande passante ($$$). Vous pouvez obtenir le même effet avec JSON et son marquage est presque exclusivement dédié aux données elles-mêmes et non à la structure sous-jacente.

16
Nolte

la réponse courte courante est la suivante: si vous utilisez AJAX pour effectuer des demandes de données, vous pouvez facilement envoyer et renvoyer des objets sous forme de chaînes JSON. Les extensions disponibles pour JavaScript prennent en charge les appels toJSON () sur tous les types de code javascript pour l'envoi de données au serveur dans une requête AJAX. Les réponses AJAX peuvent renvoyer des objets sous forme de chaînes JSON pouvant être converties en objets Javascript par un simple appel eval, par exemple. si la fonction AJAX someAjaxFunctionCallReturningJson est retournée

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

vous pouvez écrire en Javascript

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON peut également être utilisé pour les charges de service Web et autres, mais il est très pratique pour les résultats AJAX.

  • Mise à jour (dix ans plus tard): ne le faites pas, utilisez JSON.parse
11
Steven A. Lowe

Qu'est-ce que JSON?

JavaScript Object Notation (JSON) est un format léger d'échange de données inspiré des littéraux objets de JavaScript.

Les valeurs JSON peuvent comprendre:

objets (collections de paires nom-valeur) tableaux tableaux (listes ordonnées de valeurs) chaînes de caractères (guillemets doubles) nombres true, false ou null

JSON est indépendant du langage.

JSON avec PHP?

Après PHP Version 5.2.0, l’extension JSON est décodée et code les fonctionnalités par défaut.

Json_encode - renvoie la représentation JSON des valeurs Json_decode - Décode la chaîne JSON. Json_last_error - Renvoie la dernière erreur survenue.

syntaxe et règles JSON?

La syntaxe JSON est dérivée de la syntaxe de notation d'objet JavaScript:

Les données sont en paires nom/valeur. Les données sont séparées par des virgules. Les accolades sont des objets qui retiennent les crochets.

8
Elangovan

J'aime JSON principalement parce que c'est très laconique . Pour le contenu Web qui peut être compressé, ce n’est pas nécessairement une grosse affaire (d’où la raison pour laquelle x html est si populaire). Mais il y a des occasions où cela peut être bénéfique.

Par exemple, pour un projet, je transmettais des informations qui devaient être sérialisées et transmises via XMPP . Étant donné que la plupart des serveurs limiteront la quantité de données que vous pouvez transmettre dans un seul message, j'ai trouvé utile d'utiliser JSON plutôt que l'alternative évidente, XML.

En prime, si vous connaissez Python ou Javascript, vous connaissez déjà à peu près JSON et vous pouvez l’interpréter sans trop de formation.

8
Jason Baker

La différence entre JSON et la syntaxe conventionnelle serait la suivante (en Javascript)

Conventionnel

 function Employee(name, Id, Phone, email){

      this.name = name;
      this.Id = Id;
      this.Phone = Phone;
      this.email = email;
  }

  //access or call it as 

var Emp = new Employee("mike","123","9373849784","[email protected]");

avec JSON

si nous utilisons JSON, nous pouvons définir de manière différente

  function Employee(args){

   this.name = args.name;
   this.Id = args.Id;
   this.Phone = args.Phone;
   this.email = args.email;
}

//now access this as...

var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});

La chose importante à retenir est que, si nous devons construire la classe "Employee" ou le modal avec 100 éléments sans méthode JSON, nous devons tout analyser lors de la création de la classe. Mais avec JSON, nous ne pouvons définir les objets en ligne que lorsqu'un nouvel objet est défini pour la classe.

donc cette ligne ci-dessous est la façon de faire les choses avec JSON (juste un moyen simple de définir les choses)

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});
4
Ganesh Vellanki

Nous devons faire un projet sur les collèges et nous avons été confrontés à un très gros problème, appelé Politique de même origine. Entre autres choses, cela signifie que votre méthode XMLHttpRequest à partir de Javascript ne peut pas envoyer de requêtes à des domaines autres que celui de votre site.

Par exemple, vous ne pouvez pas demander à www.otherexample.com si votre site se trouve sur www.example.com. JSONRequest le permet, mais vous obtiendrez le résultat au format JSON si ce site le permet (par exemple, il dispose d'un service Web qui renvoie des messages au format JSON). C'est un problème où vous pourriez peut-être utiliser JSON.

Voici quelque chose de pratique: Yahoo JSON

4
gljivar

C'est très simple. JSON signifie Java Notation d'objet de script. Considérez-le comme une alternative à l'utilisation de XML pour transférer des données entre des composants logiciels.

Par exemple, j'ai récemment écrit un ensemble de services Web qui renvoyaient du JSON, et certains développeurs Javascript ont ensuite écrit du code qui appelait les services et utilisait les informations renvoyées dans ce format.

2
Jon

JSON (notation d'objet Javascript) est un format de données léger pour l'échange/le transfert de données. Son en paire de valeur clé comme le JavaScript est. Pour REST API, il est largement utilisé pour le transfert de données d'un serveur à un autre. De nos jours, de nombreux sites de médias sociaux l'utilisent. Bien que je ne voie pas cela aussi robuste que XML en ce qui concerne les types de données. XML a des types de données très riches et XSD. JSON manque un peu là-dedans.

Pour une même quantité de données de chaîne, JSON sera plus léger que XML, car XML possède toutes les balises d'ouverture et de fermeture, etc.

2
Shailendra Singh

Parfois, la technicité est donnée là où aucune n’est requise, et bien que beaucoup des réponses les plus votées soient précisément techniques et spécifiques, je ne pense personnellement pas qu’elles soient plus faciles à comprendre, ou succinctes, comme ce que l’on peut trouver sur Wikipedia, ou dans documentation officielle.

J'aime penser à JSON, c'est exactement ce que c'est: une langue dans un monde de langues différentes. Toutefois, la différence entre JSON et les autres langues réside dans le fait que "tout le monde" "parle" le JSON, ainsi que leur "langue maternelle".

En utilisant un exemple du monde réel, supposons que nous avons trois personnes. Une personne parle Igbo comme langue maternelle. La deuxième personne aimerait interagir avec la première personne. Toutefois, la première personne parle le yoruba comme première langue.

Que pouvons-nous faire?

Heureusement, la troisième personne dans notre exemple a grandi en parlant anglais, mais il arrive aussi de parler les deux Igbo et Yoruba en tant que langues secondes, et peut donc servir d'intermédiaire entre les deux premiers individus.

Dans le monde de la programmation, la première "personne" est Python, la deuxième "personne" est Ruby et la troisième "personne" est JSON, qui se trouve être capable de "traduire" Ruby en Python et vice versa! Évidemment, cette analogie n’est pas parfaite, mais, en tant que bilingue, je pense que c’est un moyen simple d’expliquer comment JSON interagit avec d’autres langages de programmation.

2
Jerel

Dans le contexte Java, l'une des raisons pour lesquelles JSON pourrait vouloir être utilisé, c'est qu'il fournit une très bonne alternative au framework de sérialisation Java, qui a démontré (historiquement) être sujet à des vulnérabilités assez sérieuses.

Joshua Bloch en parle en détail dans la rubrique 85 "Préférences de préférence pour Java Sérialisation" (Effective Java 3ème édition).

La sérialisation de Java était initialement destinée à traduire les structures de données dans un format pouvant être facilement transmis ou stocké. JSON répond à cette exigence, sans les exploits sérieux mentionnés ci-dessus.

0
johnm