# Programmation JavaScript/Notation JSON

* Introduction
    Programmer en deux minutes
*   * Page wiki
*   * Compteur en temps réel
*   * Site dans un document
* Outils de développement
* Syntaxe
** Ligne d'instruction
** Ordre d'évaluation
** Bloc d'instructions
** Identificateurs
** Expression littérale
** Commentaire
** Mots réservés
** Variables
** Opérateurs
** Structures de contrôle
** Exceptions et erreurs
** Fonctions utilisateur
** Évènement
* Objets prédéfinis
** window
** document
** navigator
** Array
** Boolean
** Date
** Error
** Function
** Math
** Number
** Object
** String
** Element
** RegExp
* Fonctions prédéfinies
* Programmation avancée
** Opérateurs de bits
** Fermeture
** Programmation objet
** Notation JSON
** AJAX
** Stockage
** Générateurs
** Interface DOM
** Objets Microsoft
* Frameworks
** Dojo
    Hello World
    Widgets
    Ressources
** jQuery
** Node.js
** React.js
* Tests
** Ava
** Jest
** Cypress
* Débogage
* Erreurs connues
* Références
* Introduction
    Programmer en deux minutes
*   * Page wiki
*   * Compteur en temps réel
*   * Site dans un document
* Outils de développement
* Syntaxe
** Ligne d'instruction
** Ordre d'évaluation
** Bloc d'instructions
** Identificateurs
** Expression littérale
** Commentaire
** Mots réservés
** Variables
** Opérateurs
** Structures de contrôle
** Exceptions et erreurs
** Fonctions utilisateur
** Évènement
* Objets prédéfinis
** window
** document
** navigator
** Array
** Boolean
** Date
** Error
** Function
** Math
** Number
** Object
** String
** Element
** RegExp
* Fonctions prédéfinies
* Programmation avancée
** Opérateurs de bits
** Fermeture
** Programmation objet
** Notation JSON
** AJAX
** Stockage
** Générateurs
** Interface DOM
** Objets Microsoft
* Frameworks
** Dojo
    Hello World
    Widgets
    Ressources
** jQuery
** Node.js
** React.js
* Tests
** Ava
** Jest
** Cypress
* Débogage
* Erreurs connues
* Références
[ Modifier le sommaire ]
La notation objet du langage Javascript JSON (JavaScript Object Notation en anglais) permet de déclarer des objets en donnant la valeur des membres. Cette notation concerne également les tableaux qui sont considérés comme des objets.
Elle abrège la déclaration de données en permettant de donner toutes les valeurs d'un objet ou d'un tableau en une seule expression. Cette expression peut, par exemple, être passée en paramètre d'une fonction.
Contrairement à sa principale alternative, le XML, cette notation ne comprend aucun en-tête et est toujours encodée en UTF8.
Un autre avantage de ce format par rapport au XML, quand il est utilisé pour un échange de données (RPC, REST, ...) : les données sont typées, ce qui signifie que les données sont directement interprétées en javascript (entiers, booléen, chaîne de caractères, ...), contrairement au XML où toutes les données sont des chaînes de caractères à interpréter explicitement dans le code.

## Syntaxe

Le format JSON est un sous-ensemble de la syntaxe du langage JavaScript décrivant les données de type booléen, nombre (entier et à virgule flottante), chaîne de caractère, objet et tableau.
| Syntaxe | Type | Description |
| valeur | Booléen / Nombre / Chaîne de caractères | un booléen (false ou true), un nombre entier (ex : 123), un nombre à virgule flottante (ex : 123.456, 12345.6E-3), une chaîne de caractères (ex : "Exemple de chaîne"). |
| [ item1 , item2 , ... ] | Tableau | Un tableau est représenté par la liste des items séparés par des virgules, encadrée par des crochets. |
| { clé1 : valeur1 , clé2 : valeur2 , ... } | Objet | Un objet est représenté par la liste des associations clés et valeurs séparées par des virgules, encadrée par des accolades. Les clés doivent être d'un type supporté par le format (un des types de cette table). Elle ne peut pas être un mot sans guillemets, qui n'est accepté que par le langage JavaScript. |
Le nombre restreint de types de données participe au fait que ce format est très utilisé avec beaucoup de langage de programmation car il est facile de faire un interpréteur et un encodeur pour ce format. JSON a aussi inspiré beaucoup d'autres formats de sérialisation des données.

## Tableau

Un tableau est en réalité une forme spéciale d'objet. Pour preuve, la fonction typeof(...) retourne le type "object" quand on lui passe un tableau.
La syntaxe abrégée pour déclarer le contenu d'un tableau utilise une série de valeurs entre crochets :
Où valeur est une expression dont le type peut être quelconque (entier, chaîne de caractères, tableau, objet, ...).
Exemple :
Hors code javascript, dans un fichier de données au format JSON, il n'y a pas de déclaration de variable ou de point-virgule à la fin :
Équivalent sans la notation :
Variante :
Il est possible d'imbriquer les tableaux, c'est à dire déclarer un tableau de tableaux :
Tous les éléments d'un tableau ne sont pas obligatoirement du même type :

## Objet

Un objet Javascript est en réalité une table associant un nom (attribut ou clé) à une valeur.
La notation JSON utilise une série d'association nom-valeur entre accolades :
Exemple :
Contrairement à Javascript, la notation au format JSON n'accepte pas les clés sans guillemets ni les fonctions car les clés doivent être d'un type supporté par JSON.

## Imbrications

Il est possible de déclarer des tableaux d'objets, des objets contenant des tableaux ou d'autres objets, ...
Exemple complexe :

## Conversions

* JSON.parse : convertit un JSON en objet ou tableau JS.
* JSON.stringify : convertit un objet ou un tableau JS en JSON.
    Pour le pretty-print, on peut indiquer le nombre d'espace d'indentation en paramètre 3. Ex : JSON.stringify({ name: 'test', age: 22 }, null, 4); donne la chaine de caractères :

## Voir aussi

Convertisseurs JSON :
* http://www.passiondataviz.fr/json-csv/#
* http://www.utilities-online.info/xmltojson/#.VKhxeXuj-So
Bases de données JSON :
* MongoDB
* CouchDB
* ↑ https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
* ↑ https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify