Données JSON (.json)
RFC StandardJavaScript Object Notation (JSON) est un format textuel léger et lisible par l'homme destiné à l'échange de données, totalement indépendant du langage et universellement utilisé pour les API web.
Convertir JSON en HTML
Outil de conversion gratuit de JSON vers HTML dans le navigateur. Convertissez des fichiers instantanément sur votre appareil.
Compresser des fichiers JSON en ligne
Privé - les fichiers ne quittent jamais votre appareil
Inspection et métadonnées
Les systèmes d'exploitation et les analyseurs de fichiers identifient les fichiers JSON en inspectant leur séquence initiale d'octets binaires :
Signature d'en-tête au niveau des octets (octets magiques)
Les systèmes d'exploitation et les analyseurs de fichiers identifient les fichiers JSON en inspectant leur séquence initiale d'octets binaires :
SIGNATURE HEXADÉCIMALE (DÉCALAGE 0) :
7B or 5BREPRÉSENTATION ASCII : { or [
Normalisation : RFC 8259 / ECMA-404 / ISO/IEC 21778
Spécifications techniques
| Architecture de conteneur | Format d'échange de données léger, textuel et indépendant du langage |
| Compression | Compression du texte avec Gzip, Brotli ou Zstandard (réduction habituelle de 80 % à 90 %) |
| Ordre des octets | Unicode encodé en UTF-8 (il est recommandé de ne pas utiliser d’indicateur d’ordre des octets (BOM)) |
| Espaces colorimétriques | Non applicable |
| Canaux et structure | Six types de données de base : objet, tableau, chaîne de caractères, nombre, booléen, null |
| Dimensions maximales | Sans limite prédéfinie ; les limites dépendent uniquement de la mémoire de l'analyseur et de la longueur maximale des chaînes |
| Transparence | Non applicable |
| Prise en charge du traitement en continu | Le NDJSON (JSON délimité par des sauts de ligne) et JSON Lines permettent de traiter les données progressivement et en continu. |
Matrice de comparaison technique : JSON face aux concurrents
| Attribut technique | JSON (Actuel) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Complexité de la syntaxe | Minimale (6 types, syntaxe stricte) | Élevée (basée sur l'indentation, spécification complexe) | Élevée (balises de fermeture verbeuses, espaces de noms) | Format binaire de transmission défini par schéma |
| Vitesse d’analyse syntaxique | Extrêmement rapide dans tous les langages modernes | Lente (analyse d'indentation complexe) | Modérée à lente (construction lourde du DOM) | Ultra-rapide (désérialisation binaire sans copie) |
| Commentaires pris en charge | Non (délibérément exclus pour éviter la prolifération des métadonnées) | Oui (commentaires #) | Oui (commentaires <!-- -->) | Oui dans les fichiers .proto |
| Taille de la charge réseau | Texte compact (taux de compression gzip très élevé) | Texte compact | Texte verbeux (forte répétition de balises) | Binaire ultra-compact |
Modes de corruption courants et guide de restauration hexadécimale
SyntaxError : jeton , inattendu dans le JSON à la position X.
Cause initiale: Virgule finale après le dernier élément d'un tableau ou d'un objet, ce qui est strictement illégal dans le format JSON de la RFC 8259.
Récupération: Supprimez les virgules finales des clés d'objets et des entrées de tableaux avant de les transmettre à JSON.parse().
SyntaxError : jeton ' inattendu dans le JSON.
Cause initiale: Chaînes ou clés entourées de guillemets simples ('') au lieu de guillemets doubles ("").
Récupération: Remplacez toutes les chaînes et clés entre guillemets simples par des chaînes standard entre guillemets doubles.
Analyse de sécurité et vecteurs d'attaque de l'analyseur
JSON est exclusivement textuel et à l'abri d'une exécution directe de code, mais l'analyse de données JSON non fiables peut entraîner une pollution de prototype (Prototype Pollution), des attaques ReDoS ou un épuisement de la mémoire.
Vecteurs d’attaque connus
- Pollution de prototype : des clés nommées '__proto__' ou 'constructor' modifient Object.prototype dans les applications JavaScript.
- Déni de service par dépassement de pile via des structures JSON profondément imbriquées (par exemple 10 000 crochets ouvrants).
- Perte de précision numérique : les nombres JavaScript supérieurs à 2^53 - 1 (9 007 199 254 740 991) perdent silencieusement en précision.
Bonnes pratiques de défense: N’évaluez jamais du JSON avec eval(). Utilisez JSON.parse() et filtrez les propriétés « __proto__ » dans les fonctions de fusion récursive d’objets.
Origines historiques et jalons
Principaux avantages
- Structure textuelle lisible par l'homme, auto-descriptive et concise.
- Prise en charge native de l'analyse syntaxique intégrée aux moteurs JavaScript (JSON.parse) et présente dans tous les principaux langages de programmation.
- Une spécification stricte empêche toute exécution de code arbitraire.
Limites techniques
- Aucun support pour les commentaires, les virgules finales ou les références d'objets circulaires.
- Pas de types binaires natifs (les données binaires doivent être encodées en base64, ce qui augmente la taille de 33 %).
- La sérialisation est moins efficace que celle de formats binaires comme Protocol Buffers ou MessagePack.
Faits intéressants
- Douglas Crockford a ajouté la clause de licence logicielle « Le logiciel doit être utilisé pour le Bien et non pour le Mal » aux outils JSMin JSON d'origine.
- JSON est un sous-ensemble strict de la syntaxe JavaScript, mais jusqu'à ES2019, les caractères bruts non échappés U+2028 et U+2029 étaient valides en JSON mais invalides dans les chaînes de caractères JavaScript.
- Douglas Crockford a découvert que les premiers navigateurs pouvaient transformer directement du JSON en objets avec la fonction eval() native de JavaScript, avant la normalisation de l’API JSON.parse() dans ECMAScript 5.
Foire aux questions techniques
Pourquoi JSON ne permet-il pas les commentaires ?
La grammaire JSON n’autorise pas les commentaires. Les implémentations peuvent traiter différemment les extensions et les données propres aux applications ; le format seul ne garantit donc pas l’interopérabilité.
Comment stocker des entiers 64 bits en JSON sans perdre en précision ?
Le type Number natif de JavaScript est un nombre à virgule flottante en double précision IEEE 754, qui ne prend en charge précisément que les entiers jusqu'à 2^53 - 1. Les entiers 64 bits (tels que les identifiants de base de données ou les horodatages) doivent être sérialisés sous forme de chaînes de caractères (par exemple '1234567890123456789') en JSON.
Quelle est la différence entre JSON et NDJSON / JSON Lines ?
Le JSON standard place toute la charge utile dans un seul objet ou tableau racine. Les analyseurs doivent donc charger tout le texte avant de le traiter. Le NDJSON (JSON délimité par des sauts de ligne) sépare chaque enregistrement JSON valide par un caractère de nouvelle ligne (\n), ce qui permet de traiter en continu de grands jeux de données de plusieurs gigaoctets sans consommer trop de mémoire.
Conversions associées à JSON
La conversion de données JSON en code source HTML transforme des paires clé-valeur brutes et structurées en documents web lisibles, prêts à être affichés dans le navigateur.
La conversion de code source HTML en données JSON transforme des documents web lisibles en paires clé-valeur structurées pour leur traitement automatisé et leur intégration via une API.
La conversion d'un script texte d'export SQL en un export de données JSON transforme des tables de bases de données relationnelles rigides en objets imbriqués flexibles pour les applications web modernes.
La transformation de fichiers texte JSON non structurés en bases de données relationnelles SQLite structurées permet une indexation et des requêtes rapides sur de grands volumes de données.
La conversion de fichiers Adobe Swatch Exchange en structures JSON de couleurs transforme des palettes de conception binaires en objets texte lisibles par les applications web modernes.
La conversion de données textuelles JSON de couleurs en nuanciers binaires Adobe ASE fait le lien entre les jetons de conception web et les logiciels professionnels de mise en page pour ordinateur.
La conversion de fichiers texte de palettes GIMP en structures JSON de couleurs permet aux applications web de lire directement les nuanciers sans scripts d'analyse complexes.
La conversion de fichiers JSON de couleurs structurés en variables CSS transforme des objets de données bruts en propriétés de style natives pour les sites web.