: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]]