2.8 KiB
2.8 KiB
Json
- Introduction
- Spécifications
- Extensions de JSON
- Description d'une stucture de données JSON (JSPEC)
- Références
Introduction
*J*avaScript *O*bject *N*otation :
- Est un format de données textuelles dérivé de la notation des objets du langage JavaScript,
- Permet de représenter de l’information structurée,
- A été créé par Douglas Crockford entre 2002 et 2005,
- Première norme est ECMA-404, publiée en octobre 20032,
- Actuellement décrit par les deux normes en concurrence : RFC 82593 de l’IETF et ECMA-4044 de l'ECMA, denière version publiée en décembre 2017.
Spécifications
Un document JSON comprend :
-
2 types composés :
- Objet ou dictionnaire (clés/valeurs),
- Liste ordonnées de valeurs,
-
4 types scalaires :
- Booléen : true ou false,
- Nombre : décimal signé (pas de distinction entre entier et flottant),
- Chaîne de caractères : séquence de 0 ou plusieurs caractères Unicode entourée de guillemets,
- La valeur null : une valeur vide.
Extensions de JSON
JSON5
Destiné à contourner les limitation de JSON :
- Les noms des champs ne sont plus entre guillemets,
- Ajout des commentaires (sur une ou plusieurs lignes),
- Support du format hexadécimal pour les nombres,
- Les nombres peuvent prendre les valeurs Infinity ou NaN,
- Espaces blancs supplémentaires autorisés,
- Les string peuvent être contenus entre apostrophes.
HJSON
Destiné à contourner les limitation de JSON :
- Les champs peuvent être séparés par un retour à la ligne au lieu d'une virgule,
- Ajout des commentaires (sur une ou plusieurs lignes),
- Utilisation des guillemets pour encapsuler une string n'est pas obligatoire,
- Les string peuvent être écrites sur plusieurs lignes.
Description d'une stucture de données JSON (JSPEC)
JSPEC est un language décrivant une structure de données JSON (équivalent à xsd pour le xml). Les fichiers de descripion JSPEC ont l'extension *.jspec.
Python
Le module jspec :
# pip install jspect
from jspec import loads, check
spec = loads('{"name": string, "age": int, ... }')
chris = {"name": "Chris", "age": 26, "status": "online"}
bob = {"name": "Bob", "age": 34.5}
print(f'{check(spec, chris) = }')
print(f'{check(spec, bob) = }')
check(spec, chris) = (True, '') check(spec, bob) = (False, 'At location $ - exhausted JSON object, failed to match the following JSPEC pairs: ["age": int, ...]')