Qu'est-ce que JSON en Node.js

La notation JavaScript condensé dans un objet devenu si populaire ! Une traduction de l'article What is JSON?

Classé dans Conventions JavaScript

Traduction

La JavaScript Object Notation, ou JSON, est un format de données léger qui est devenu la norme de facto pour le web. JSON peut être représenté soit comme une liste de valeurs, par exemple un tableau, soit comme un hachage de propriétés et de valeurs, par exemple un objet.

// un tableau JSON
["one", "two", "three"]

// un objet JSON
{ "one": 1, "two": 2, "three": 3 }

Encodage et décodage

JavaScript propose deux méthodes pour encoder des structures de données en JSON et pour décoder le format JSON en objets et tableaux JavaScript. Elles sont toutes deux disponibles sur l'objet JSON qui est disponible dans la portée globale.

JSON.stringify prend un objet ou un tableau JavaScript et renvoie une chaîne sérialisée au format JSON.

const data = {
  name: "John Doe",
  age: 32,
  title: "Vice Président du JavaScript"
}

const jsonStr = JSON.stringify(data);

console.log(jsonStr);

// va afficher `'{"name":"John Doe","age":32,"title":"Vice Président du JavaScript"}'`

JSON.parse prend une chaîne JSON et la décode en une structure de données JavaScript.

const jsonStr = '{"name":"John Doe","age":32,"title":"Vice Président du JavaScript"}';

const data = JSON.parse(jsonStr);

console.log(data.title);

// prints `'Vice Président du JavaScript'`

Qu'est-ce qu'un JSON valide ?

Il y a quelques règles à retenir lorsque l'on traite des données au format JSON. Il existe également plusieurs pièges qui peuvent produire du JSON invalide.

  • Les objets et tableaux vides sont acceptés
  • Les chaînes de caractères peuvent contenir n'importe quel caractère unicode, y compris les propriétés des objets.
  • null est une valeur JSON valide en soi.
  • Toutes les propriétés d'objet doivent toujours être entre guillemets.
  • Les valeurs des propriétés d'objet doivent être d'un des types suivantes : String, Number, Boolean, Object, Array, Null.
  • Les valeurs numériques doivent être au format décimal, sans représentation octale ou hexagonale.
  • Les virgules de fin de tableau ne sont pas autorisées.

Voici que des exemples de JSON valides.

{"name":"John Doe","age":32,"title":"Vice President of JavaScript"}

["one", "two", "three"]

// les valeurs imbriquées sont valides
{"names": ["John Doe", "Jane Doe"] }

[ { "name": "John Doe"}, {"name": "Jane Doe"} ]

{} // hachage vide

[] // liste vide

null

{ "key": "\uFDD0" } // codes d'échappement unicode

Voici que des exemples de mauvais formatage JSON.

{ name: "John Doe", 'age': 32 } // le nom et l'âge doivent être entre guillemets

[32, 64, 128, 0xFFF] // les nombres hexagonaux ne sont pas autorisés

{ "name": "John Doe", "age": undefined } // undefined est une valeur invalide

// les fonctions et les dates ne sont pas autorisées
{ "name": "John Doe",
  "birthday": new Date('Fri, 26 Jan 2019 07:13:10 GMT'),
  "getName": function() {
      return this.name;
  }
}

L'appel de JSON.parse avec une chaîne JSON non valide entraînera l'émission d'une SyntaxError. Si vous n'êtes pas sûr de la validité de vos données JSON, vous pouvez anticiper les erreurs en enveloppant l'appel dans un bloc try/catch.

Notez que les seules valeurs complexes autorisées dans JSON sont les objets et les tableaux. Les fonctions, les dates et autres types sont exclus. Cela peut sembler illogique au premier abord. Mais n'oubliez pas que JSON est un format de données, et non un format permettant de transférer des objets JavaScript complexes avec leurs fonctionnalités.

Validateurs JSON

JSON étant devenu le format de données le plus largement utilisé, avec des règles bien définies à respecter, de nombreux validateurs sont disponibles pour vous aider dans votre travail :

  • Validateurs en ligne : Si vous ne faites que jouer avec JSON ou vérifier le JSON de quelqu'un (sans IDE ni éditeur), les validateurs en ligne peuvent vous être d'une grande aide. Par exemple : jsonlint.com est un bon validateur et reformateur JSON en ligne.
  • Paquets npm : Si vous travaillez en équipe et souhaitez intégrer la validation JSON dans votre projet ou simplement automatiser la validation dans votre flux de travail, la vaste collection de packages npm est à votre disposition. Par exemple : jsonlint est une version purement JavaScript du service fourni sur jsonlint.com.
  • Plugins pour IDEs/éditeurs : Il existe de nombreux plugins/extensions disponibles pour la plupart des IDE/éditeurs qui valident JSON pour vous. Certains éditeurs, comme VS Code, intègrent d'emblée l'IntelliSense et la validation JSON.

JSON dans d'autres langages

Bien que JSON ait été inspiré par la simplicité des structures de données du langage JavaScript, son utilisation n'est pas limitée à ce langage. De nombreux autres langages disposent de méthodes permettant de transférer des hachages et des listes natives en objets JSON stringifiés. Voici un exemple rapide en ruby.

require 'json'

data = { :one => 1 }
puts data.to_json

# prints "{ \"one\": 1 }"

Lire dans une autre langue