Files
org-roamings/20220604110059-json.org
2022-06-04 12:57:39 +02:00

70 lines
2.8 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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