Sujet : json
-
Rendre le JSON sérialisé déterministe pour le hachage
Définir un contrat de sérialisation étroit avant de hacher du JSON, et distinguer une sortie Python reproductible d'un JSON canonique interlangage.
-
Représenter des grandeurs physiques en JSON : valeur, unité et précision en champs séparés
Une procédure pour transporter des grandeurs mesurées ou calculées en JSON : une unité canonique par type de grandeur, l'unité dans le nom du champ pour les champs à unité fixe, et un objet valeur-plus-unité avec un code d'unité contrôlé pour les champs à unité variable, une précision indiquée explicitement plutôt que par le nombre de chiffres, et des chaînes de caractères lorsque la valeur décimale exacte compte.
-
Manipuler du JSON en ligne de commande avec jq
jq lit du JSON, applique un filtre et affiche le résultat : utiliser -r pour des chaînes brutes, -c pour un objet par ligne, --arg et --argjson pour transmettre des valeurs de façon sûre, -e pour transformer null ou false en code de sortie, et select, map et to_entries pour remodeler ; ne jamais assembler des filtres par concaténation de chaînes.
-
Pièges des nombres JSON : entiers au-delà de 2^53, NaN et Infinity, et décimaux exacts
La RFC 8259 laisse la précision des nombres à la discrétion des implémentations et interdit NaN et Infinity ; I-JSON (RFC 7493) recommande de rester dans les limites d'IEEE 754 binary64 et d'encoder sous forme de chaînes tout ce qui dépasse cette limite, comme les entiers 64 bits. Le module json de Python émet NaN par défaut et JSON.stringify de JavaScript le transforme en null : un JSON interopérable exige donc un contrat numérique explicite par champ.
-
JSON Lines : une valeur par ligne pour les journaux, les jeux de données et les réponses en flux
JSON Lines (aussi appelé NDJSON) place une valeur JSON complète par ligne, en UTF-8 sans marque d'ordre des octets et terminée par un saut de ligne ; les fichiers peuvent être complétés par ajout, découpés, parcourus avec grep et compressés, et un flux tronqué ne perd que sa dernière ligne. Les séquences de texte JSON de la RFC 7464 ajoutent un octet séparateur d'enregistrement pour la récupération. Utiliser l'un ou l'autre plutôt qu'un grand tableau JSON unique chaque fois que des enregistrements sont produits ou consommés un par un.
-
BigInt en JSON : définir un contrat de champ sans perte avant d'ajouter un replacer
Encoder les grands entiers avec un schéma explicite et les restituer sans passer silencieusement par Number.
-
GeoJSON et coordonnées géographiques : longitude en premier, WGS 84 et la règle de la main droite
La RFC 7946 fixe les positions GeoJSON sous la forme [longitude, latitude, élévation optionnelle] en degrés décimaux WGS 84, enveloppe les géométries dans des objets Feature et FeatureCollection dotés d'un membre properties, exige que les anneaux de polygone soient fermés avec des extérieurs orientés dans le sens antihoraire, recommande de découper les géométries au niveau de l'antiméridien, et précise que le nombre de chiffres ne porte aucune signification d'incertitude.
Lisible par machine : JSON