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

542

J'ai regardé sur wikipedia et l'ai recherché sur Google et j'ai 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 ou mieux mon code ou mon interface utilisateur, alors j'aimerais le savoir. Quelqu'un peut-il me donner une explication succincte?

Ben
la source
2
JSON est un sous-ensemble de YAML yaml.org
Brad Gilbert
15
copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-it ceci est un bel exemple d'utilisation simple
Tom
1
Lisez aussi sur I-JSON: tbray.org/ongoing/When/201x/2015/03/23/i-json
Christophe Roussy
1
+ Brad Gilbert Pas vraiment - c'est sa propre façon d'exprimer des données, et est similaire à JSON juste parce qu'ils expriment tous les deux des objets sous forme de chaînes (de la même façon que XML ou plists ou bien d'autres), mais JSON est meilleur pour l'écriture machine et YAML pour l'écriture humaine .
Ben Aubin

Réponses:

649

JSON (JavaScript Object Notation) est un format léger utilisé pour l'échange de données. Il est basé sur un sous-ensemble de langage JavaScript (la façon dont les objets sont construits en JavaScript). Comme indiqué dans le MDN , certains JavaScript n'est pas JSON, et certains JSON n'est pas JavaScript.

Un exemple d'utilisation est les réponses des services Web. Autrefois, les services Web utilisaient XML comme principal format de données pour transmettre les données en retour, mais depuis que JSON est apparu ( le format JSON est spécifié dans la RFC 4627 par Douglas Crockford ), il a été le format préféré car il est beaucoup plus poids léger

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

JSON est construit sur deux structures:

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

Structure JSON



Diagramme d'objet JSON

Diagramme de tableau JSON

Diagramme de valeur JSON

Diagramme de chaîne JSON

Diagramme numérique JSON

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 JSON et que JSON est un objet Javascript. Ceci est une erreur.

En Javascript ce 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"}'. xest un objet de type chaîne non un objet à part entière. Pour en faire un objet Javascript à part entière, vous devez d'abord l'analyser var x = JSON.parse('{"x":"y"}');, xc'est maintenant un objet mais ce n'est plus du JSON.

Voir objet Javascript Vs JSON


Lorsque vous travaillez avec JSON et JavaScript, vous pouvez être tenté d'utiliser le eval fonction pour évaluer le résultat renvoyé dans le rappel, mais cela n'est pas suggéré car il y a deux caractères (U + 2028 & U + 2029) valides en JSON mais pas en JavaScript (en savoir plus 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 se trouve ici et voici un lien direct vers le fichier js. De nos jours, tous les principaux navigateurs ont sa 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 comme paramètre et renvoie une chaîne au format JSON. Ceci est utile lorsque vous souhaitez 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 ( parseet stringify) prennent également un deuxième 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 à ce sujet ici )

Btw, pour tous ceux qui pensent que JSON est juste pour JavaScript, consultez cet article qui explique et confirme le contraire.


Références

Andreas Grech
la source
1
Quelle que soit la façon dont les informations sont sérialisées, vous allez avoir un analyseur, non? Par conséquent, qui se soucie du format que vous utilisez pour transmettre des données si ses détails d'implémentation vont être abstraits.
Tom Lehman
6
Eh bien, en fait, si vous transmettez des données entre le client et le serveur, je pense qu'il est assez important de faire attention à la taille de vos réponses.
Andreas Grech
9
Pour le pédant, il y a quelques caractères que JSON gère différemment de JavaScript, l'empêchant d'être un sous-ensemble strict: timelessrepo.com/json-isnt-a-javascript-subset
Jeremy Banks
Lorsque vous dites qu'il est plus léger que XML, faites-vous référence à la taille du fichier ou est-ce que léger a une signification spatiale dans le codage?
whatahitson le
1
Voulez-vous donc remplacer XML par JSON? Est-ce cela que vous dites? Si c'est le cas ... Génial, xml est un cauchemar.
James111
66

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

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

Moi: «C'est essentiellement une façon de communiquer avec quelqu'un par écrit… mais avec des règles très précises.

Épouse: ouais ....?

Moi: En anglais prosaïque, les règles sont assez lâches: comme pour les combats en cage. Ce n'est pas le cas avec JSON. Il y a plusieurs façons de décrire quelque chose:

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

• Exemple 2: Notre famille: vous, moi, kid1 et kid2.

• Exemple 3: Famille: [vous, moi, kid1, kid2]

• Exemple 4: nous avons 4 personnes dans notre famille: maman, papa, kid1 et kid2.

Épouse: Pourquoi n'utilisent-ils pas simplement un anglais simple à la place?

Moi: Oui, mais souvenez-vous que nous avons affaire à des ordinateurs. Un ordinateur est stupide et ne pourra pas comprendre les phrases. Nous devons donc être très précis lorsque les ordinateurs sont impliqués, sinon ils se confondent. De plus, JSON est un moyen de communication assez efficace, donc la plupart des choses non pertinentes sont supprimées, ce qui est plutôt pratique. Si vous vouliez communiquer notre famille à un ordinateur, vous pouvez le faire comme suit:

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

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

Femme: Alors, comment puis-je écrire dans Json?

Un bon moyen serait d'utiliser un sérialiseur json - qui est une bibliothèque qui fait le gros du travail pour vous.

Sommaire

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

BKSpurgeon
la source
48

En bref - JSON est un moyen de sérialiser de telle manière qu'il devient du code JavaScript. Lorsqu'il est exécuté (avec eval ou autre), ce code crée et renvoie un objet JavaScript qui contient les données que vous avez sérialisées. Ceci est disponible car JavaScript autorise 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 confortable de transmettre des données de votre serveur à 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 d'espace 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.

Vilx-
la source
31

En bref, c'est une notation de script pour transmettre des données. D'une certaine manière, une alternative à XML, prenant en charge nativement les types de données de base, les tableaux et les tableaux associatifs (paires nom-valeur, appelées objets parce que c'est ce qu'elles représentent).

La syntaxe est celle utilisée en 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 plus de détails est ici:

http://secretgeek.net/json_3mins.asp

mson
la source
19

Le format JSON est souvent utilisé pour sérialiser et transmettre des données structurées sur une connexion réseau. Il est principalement utilisé pour transmettre des données entre un serveur et une application Web, servant d'alternative à XML.

Pinakin Nayi
la source
16

JSON est la notation d'objet JavaScript. C'est un moyen beaucoup plus compact de transmettre des ensembles de données via des connexions réseau par rapport à XML. Je suggère que JSON soit utilisé dans toutes les applications de type AJAX où XML serait autrement 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 balisage est presque exclusivement dédié aux données elles-mêmes et non à la structure sous-jacente.

Nolte
la source
11

la réponse courte courante est: 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 la prise en charge Javascript de JSON () appellent tous les types 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 a renvoyé someAjaxFunctionCallReturningJson

"{ \"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.

  • Mise à jour (dix ans plus tard): ne faites pas cela, utilisez JSON.parse
Steven A. Lowe
la source
1
Avec eval (), tout serait évalué. c'est un risque pour la sécurité.
Thomas Weller
@ThomasWeller ouais cette réponse est ancienne, j'irais avec JSON.parse maintenant merci!
Steven A. Lowe
8

J'aime JSON principalement parce qu'il est tellement laconique . Pour le contenu Web qui peut être compressé, ce n'est pas nécessairement un gros problème (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 sur l'alternative évidente, XML.

En prime, si vous êtes familier avec Python ou Javascript, vous connaissez déjà à peu près JSON et pouvez l'interpréter sans beaucoup de formation.

Jason Baker
la source
8

Qu'est-ce que JSON?

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

Les valeurs JSON peuvent comprendre:

objets (collections de paires nom-valeur) tableaux (listes ordonnées de valeurs) chaînes (entre guillemets) 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écode et encode 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 - Retourne 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 contiennent des objets

Elangovan
la source
4

Nous devons faire un projet sur le collège et nous avons été confrontés à un très gros problème, il s'appelle la même politique d'origine. Entre autres choses, cela fait que votre méthode XMLHttpRequest à partir de Javascript ne peut pas effectuer de requêtes vers des domaines autres que le domaine sur lequel se trouve votre site.

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

Voici quelque chose de pratique: Yahoo JSON

gljivar
la source
4

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 différentes manières

  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 dont nous devons nous souvenir 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 pour la classe est défini.

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]'});
Ganesh Vellanki
la source
2
Ce n'est pas exactement JSON - c'est un objet Javascript (pas JSON)
Ben Aubin
4

Parfois, la technicité est donnée là où aucune n'est requise, et bien que la plupart des réponses les plus votées soient précisément techniques et spécifiques, je ne pense pas qu'elles soient plus faciles à comprendre ou succinctes, comme ce qui peut être trouvé sur Wikipédia ou dans documentation officielle.

La façon dont j'aime penser JSON est exactement ce qu'elle est - une langue dans un monde de langues différentes. Cependant, la différence entre JSON et d'autres langues est que "tout le monde" "parle" JSON, ainsi que leur "langue maternelle".

En utilisant un exemple du monde réel, supposons que nous avons trois personnes. Une personne parle l'igbo comme langue maternelle. La deuxième personne aimerait interagir avec la première personne, cependant, 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 comme deuxième langue, et peut donc agir comme 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 personne bilingue, je pense que c'est un moyen facile de voir comment JSON interagit avec d'autres langages de programmation.

Jerel
la source
2

C'est très simple. JSON signifie Java Script Object Notation. Considérez-le comme une alternative à l'utilisation de XML pour le transfert de données entre les composants logiciels.

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

Jon
la source
2

JSON (Javascript object notation) est un format de données léger pour l'échange / transfert de données. C'est dans la paire de valeurs clés que le JavaScript est. Pour l'API REST, elle est largement utilisée pour le transfert de données du serveur au client. De nos jours, de nombreux sites de médias sociaux l'utilisent. Bien que je ne vois 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 dans ce domaine.

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

Shailendra Singh
la source
0

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 cadre de sérialisation Java, qui s'est révélé (historiquement) soumis à des vulnérabilités assez graves.

Joshua Bloch en discute en détail dans le point 85 «Préférez les alternatives à la sérialisation Java» (Java effectif 3e édition)

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

johnm
la source
-3

Essayez le code suivant pour analyser votre réponse json php: read.php

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script type="text/javascript">  
$.ajax({
    url:'index.php',
    data:{},
    type:"POST",
    success:function(result) {
        jsondecoded = $.parseJSON(result);
        $.each(jsondecoded, function(index, value) {
            $("#servers").text($("#servers").text() + " " + value.servername);
            console.log(value.start);
            console.log(value.end);
            console.log(value.id);
        });
    },
    statusCode: {
    404: function() {
      alert( "page not found" );
    }
  }
});
</script>

server.php

<?php 
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>
amit rawat
la source
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la manière et / ou la raison pour laquelle il résout le problème améliorerait la valeur à long terme de la réponse.
Nic3500