Aller au contenu principal
PulsarKit

Convertir XML en JSON

Transformez du XML en JSON avec gestion des attributs, des sections CDATA et des espaces de noms comme vous le décidez, et des erreurs de syntaxe qui indiquent la ligne exacte.

Déposez vos fichiers ici

.xml, .rss, .svg, .xhtml, .txt · jusqu’à 300 Mo

Attributs
Plus de réglages

Comment convertir en JSON

  1. 1

    Déposez un fichier XML

    Ajoutez un fichier ou jusqu'à vingt. Les flux RSS, dessins SVG et pages XHTML sont tous du XML et sont lus de la même manière.

  2. 2

    Choisissez le mapping des attributs et répétitions

    Les attributs peuvent être préfixés, regroupés sous une clé unique ou ignorés, et les balises répétées peuvent toujours devenir des tableaux ou seulement quand elles se répètent vraiment.

  3. 3

    Convertissez et téléchargez le JSON

    Cliquez sur le bouton et enregistrez le résultat indenté. Un lot de fichiers revient sous forme d’archive ZIP unique.

Un élément ou une liste d’un seul

La partie délicate de tout mapping XML-vers-JSON est une liste avec un seul membre : un <order> avec trois enfants <item> devient clairement un tableau, mais le même document avec un seul item ressemble à un objet simple, et du code qui boucle dessus se casse dès le premier vrai client. C’est pour cela que la règle pour les tableaux est un réglage explicite et non une heuristique cachée, et que vous pouvez forcer chaque enfant à devenir un élément de tableau.

Des nombres qui n’en sont pas

La typage automatique convertit 42 en nombre et true en booléen, ce qui est en général souhaitable et parfois catastrophique. Un code de pièce 00123 ne doit pas devenir 123, et un identifiant fiscal de vingt chiffres ne doit pas être arrondi en notation scientifique. Les valeurs avec des zéros en tête et les suites de chiffres de plus de quinze caractères restent donc des chaînes, et désactiver le typage garde chaque valeur exactement telle qu’elle est écrite.

Les entités déclarées sont refusées

Un DOCTYPE contenant une déclaration <!ENTITY> est rejeté avant le début de l’analyse. Dix entités imbriquées, chacune se référant dix fois à la précédente, se développent en gigaoctets de texte et figent l’onglet, l’attaque classique « billion laughs ». Rien n’est développé ici au-delà des cinq entités prédéfinies et des références de caractères numériques, donc l’attaque n’a plus rien à déplier.

Analyse ici, pas ailleurs

L’analyseur s’exécute dans votre navigateur, dans un thread dédié, avec le code chargé avec la page. Votre XML n’est jamais envoyé, il n’y a donc aucune copie serveur à supprimer, aucune file d’attente et aucun journal à craindre. Quand vous fermez l’onglet, le document et le JSON produit disparaissent.

Questions fréquentes

Où vont les attributs XML dans le JSON ?

Par défaut chaque attribut devient une clé sur le même objet que les enfants de l’élément, préfixée par @_ pour éviter toute collision avec une balise enfant du même nom. Vous pouvez à la place rassembler tous les attributs dans un sous-objet @attributes, ce qui garde le contenu de l’élément clair, ou bien ignorer complètement les attributs.

Pourquoi un seul élément répété n’est-il pas un tableau ?

Parce que rien dans le document ne dit que c’est une liste. Avec la règle par défaut, une balise devient un tableau seulement lorsqu’elle apparaît effectivement plus d’une fois sous le même parent, ce qui reflète exactement le fichier. Si votre consommateur a besoin d’une structure fixe, passez le réglage des tableaux à « toujours » pour que même un enfant isolé arrive sous forme de tableau d’un élément.

Que deviennent les sections CDATA ?

Par défaut le contenu CDATA est fusionné avec le texte de l’élément, puisque CDATA n’est qu’un style de citation et non un type de donnée distinct. Si vous devez savoir quelle partie d’une valeur était citée ainsi, par exemple pour réémettre du XML plus tard, passez le réglage sur « séparé » et il sera placé dans sa propre clé #cdata.

Puis-je supprimer les préfixes d’espace de noms ?

Oui. Supprimer les espaces de noms transforme dc:title en title, ce qui rend les formats de flux et de documents bien plus simples à manipuler en code. Laissez-les si deux espaces de noms différents utilisent le même nom local dans le même fichier, car dans ce cas le préfixe est la seule chose qui sépare les clés.

Pourquoi ai-je une erreur à propos des entités personnalisées ?

Parce qu’un document qui déclare ses propres entités dans le DOCTYPE est refusé au lieu d’être développé. C’est la seule défense fiable contre les bombes d’expansion d’entités, qui peuvent transformer quelques kilo-octets en gigaoctets de mémoire. Supprimez le bloc DOCTYPE et le reste du document se convertira normalement.

Les flux RSS et fichiers SVG sont-ils pris en charge ?

Oui, ce sont tous deux du XML ordinaire. Un flux RSS se convertit en un objet de métadonnées de canal avec un tableau d’items, une structure pratique à utiliser. Un SVG se convertit en son arbre d’éléments avec tous les attributs de présentation intacts, utile pour inspecter ou réécrire des dessins par programmation.

Que se passe-t-il si le XML contient une erreur de syntaxe ?

Vous obtenez la ligne, la colonne et la balise concernée, par exemple une balise fermante attendue ligne 214, colonne 5, au lieu d’un simple échec d’analyse. Dans un fichier avec des dizaines de milliers d’éléments, cette précision fait toute la différence, car elle indique où chercher.

Mon fichier est-il envoyé quelque part ?

Non. Décodage, validation et conversion s’exécutent localement dans votre onglet de navigateur. Aucun serveur n’intervient à aucun moment, il n’existe donc aucune copie de votre document une fois la page fermée.

Outils associés