Weekly backup.

This commit is contained in:
2022-06-04 12:57:39 +02:00
parent e552583393
commit 015b896f65
68 changed files with 3530 additions and 27 deletions

69
20220604110059-json.org Normal file
View File

@@ -0,0 +1,69 @@
: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 linformation 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 lIETF 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]]