562 votes

Qu'est-ce que JSON et à quoi sert-il ?

J'ai consulté Wikipédia, Google et la documentation officielle, mais je n'ai toujours pas réussi à comprendre ce qu'est JSON et pourquoi je l'utilise.

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 améliorer mon code ou mon interface utilisateur, alors j'aimerais le savoir. Quelqu'un peut-il me donner une explication succincte ?

2 votes

JSON est un sous-ensemble de YAML. yaml.org

15 votes

1 votes

Lisez également ce qui concerne I-JSON : tbray.org/ongoing/When/201x/2015/03/23/i-json

673voto

Andreas Grech Points 39188

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 certains JavaScript ne sont pas JSON, et certains JSON ne sont pas JavaScript.

Les réponses aux services web en sont un exemple. Auparavant, 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 par Douglas Crockford ), il a été le format préféré parce qu'il est beaucoup plus facile à utiliser. léger

Vous pouvez trouver beaucoup plus d'informations sur le site officiel de la Commission européenne. Site web JSON .

JSON est construit sur deux structures :

  • Une collection de paires nom/valeur. Dans divers langages, il s'agit d'un objet, d'un enregistrement, d'une structure, d'un dictionnaire, d'une table de hachage, d'une liste de clés ou d'un tableau associatif.
  • Une liste ordonnée de valeurs. Dans la plupart des langages, il s'agit d'un tableau, d'un vecteur, d'une liste ou d'une 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 de caractères !

Les gens supposent souvent que tous les objets Javascript sont JSON et que JSON est un objet Javascript. C'est faux.

En Javascript var x = {x:y} est pas JSON c'est un Objet Javascript . Les deux ne sont pas la même chose. L'équivalent JSON (représenté en langage Javascript) serait var x = '{"x":"y"}' . x est un objet de type chaîne de caractères pas un objet à part entière. Pour le transformer 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 Objet Javascript Vs JSON


Lorsque vous travaillez avec JSON et JavaScript, vous pouvez être tenté d'utiliser la fonction eval pour évaluer le résultat renvoyé par la fonction de rappel, mais cela n'est pas conseillé car il existe deux caractères (U+2028 & U+2029) valides dans JSON mais pas dans JavaScript (lire la suite de cet article). aquí ).

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 à l'adresse suivante aquí et voici un lien direct au fichier js. Tous les principaux navigateurs actuels ont sa propre mise en œuvre pour ça.

Exemple d'utilisation du parseur 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. Cette méthode est utile lorsque vous souhaitez renvoyer les 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 y 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. (Pour en savoir plus aquí )

Entre-temps, pour tous ceux qui pensent que JSON est réservé à JavaScript, jetez un œil à ce poste qui explique et confirme le contraire.


Références

1 votes

Quelle que soit la façon dont l'information est sérialisée, vous aurez un analyseur syntaxique, n'est-ce pas ? Par conséquent, peu importe le format que vous utilisez pour transmettre des données si les détails de sa mise en œuvre sont abstraits.

6 votes

En fait, si vous transmettez des données entre le client et le serveur, je pense qu'il est important de faire attention à la taille de vos réponses.

9 votes

Pour les pédants, il y a quelques caractères que JSON traite différemment de JavaScript, ce qui l'empêche d'être un sous-ensemble strict : timelessrepo.com/json-isnt-a-javascript-subset

48voto

Vilx- Points 37939

En bref, JSON est une façon de sérialiser de telle sorte qu'il devienne 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 possible 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. Tout d'abord, il s'agit d'un moyen confortable de transmettre des données du backend de votre serveur à votre code JavaScript. Ainsi, il est souvent utilisé dans AJAX.

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

31voto

mson Points 4828

En bref, il s'agit d'une notation de script pour le passage de données. D'une certaine manière, c'est une alternative à XML, qui supporte nativement les types de données de base, les tableaux et les tableaux associatifs (paires nom-valeur, appelés objets parce que c'est ce qu'ils représentent).

La syntaxe est celle utilisée en JavaScript et JSON est l'abréviation de "JavaScript Object Notation". Cependant, elle est devenue portable et est utilisée dans d'autres langages également.

Un lien utile pour plus de détails est ici :

http://secretgeek.net/json_3mins.asp

16voto

Nolte Points 984

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 toute application de type AJAX où XML serait autrement l'option "recommandée". La verbosité de XML augmentera 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.

11voto

Steven A. Lowe Points 40596

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.

  • Mise à jour (dix ans plus tard) : Ne faites pas ça, utilisez JSON.parse.

1 votes

Avec eval(), tout serait évalué. C'est un risque pour la sécurité.

0 votes

@ThomasWeller ouais cette réponse est ancienne, j'irais avec JSON.parse maintenant merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X