70 lines
2.8 KiB
Org Mode
70 lines
2.8 KiB
Org Mode
:PROPERTIES:
|
||
:ID: 6c59d844-1f1a-440c-be78-4a9df286fab6
|
||
:mtime: 20220604114243
|
||
:ctime: 20220604110059
|
||
:END:
|
||
#+title: Json
|
||
|
||
* 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 /[[https://github.com/chrismalcolm/jspec][jspec]]/ :
|
||
#+BEGIN_SRC python :results output
|
||
# 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) = }')
|
||
#+END_SRC
|
||
|
||
#+RESULTS:
|
||
: check(spec, chris) = (True, '')
|
||
: check(spec, bob) = (False, 'At location $ - exhausted JSON object, failed to match the following JSPEC pairs: ["age": int, ...]')
|
||
|
||
* Références
|
||
* [[https://medium.com/@chrismalcolm_35838/the-best-json-validation-library-for-python-in-2022-b6de4f8014d4][The best json validation library for python in 2022 - Medium]]
|
||
* [[https://fr.wikipedia.org/wiki/JavaScript_Object_Notation][Javascript Object Notation - Wikipedia]]
|