Aller au contenu
jsonbeautifiers
Français

JSON en XML

XML bien formé avec la racine de votre choix, les attributs et un échappement correct.

JSON
XML

Rien de ce que vous collez ne quitte votre navigateur. La liste d’autorisation connect-src en fait une garantie du navigateur plutôt qu’une promesse. Vérifiez-le vous-même

Convertissez du JSON en XML bien formé, avec l’élément racine de votre choix, la prise en charge des attributs et un échappement correct.

Les deux modèles de données ne se correspondent pas exactement : cette conversion fait donc des choix. Ils sont listés ici et signalés dans les notes de sortie quand ils s’appliquent à votre document.

Comment fonctionne la correspondance

Les clés d’objet deviennent des éléments
Une clé "name" devient un élément <name>.
Une clé préfixée par @ devient un attribut
{"@id": "1"} devient id="1" sur l’élément englobant.
Une clé #text devient le texte de l’élément
C’est ainsi que l’on produit un élément possédant à la fois des attributs et du contenu.
Les tableaux répètent l’élément
C’est ainsi que XML exprime une liste. Il n’y a pas d’élément conteneur distinct, sauf si vous en construisez un.
null devient xsi:nil
La convention XML Schema. Un élément vide serait indiscernable d’une chaîne vide.

Des noms de clé qui ne sont pas des noms XML valides

Un nom d’élément XML ne peut pas commencer par un chiffre ni contenir d’espaces ou la plupart des signes de ponctuation. Les clés JSON font régulièrement les deux. Ces clés sont réécrites avec des tirets bas, et la conversion vous le dit plutôt que de le faire discrètement, car la conversion inverse ne restaurera pas les noms d’origine.

Ce que XML possède et que JSON n’a pas

Les espaces de noms, les instructions de traitement, un langage de schéma antérieur de dix ans à JSON Schema, les commentaires, et une distinction entre attributs et éléments enfants. Rien de tout cela ne survit à un aller-retour par JSON : une conversion JSON vers XML produit donc du XML valide mais structurellement plus simple que du XML écrit à la main.

How to do this in code

Convertir en code.

py Python
import json
from dicttoxml import dicttoxml

xml = dicttoxml(json.loads(text), custom_root='root', attr_type=False)

# attr_type=False turns off the type="str" attributes dicttoxml
# adds to every element by default.
js JavaScript
import { XMLBuilder } from 'fast-xml-parser';

const builder = new XMLBuilder({
  format: true,
  attributeNamePrefix: '@',
  ignoreAttributes: false,
});
const xml = builder.build(JSON.parse(text));
cs C#
using Newtonsoft.Json;

XNode node = JsonConvert.DeserializeXNode(json, "root");
var xml = node.ToString();

Questions fréquentes

Pourquoi y a-t-il un attribut xsi:nil ?
Parce que XML n’a pas de null. La convention XML Schema marque un élément comme nil avec cet attribut, ce qui garde null distinct d’une chaîne vide. Un <field/> vide pourrait être l’un ou l’autre.
Puis-je faire un aller-retour JSON vers XML et retour ?
Pour des documents qui restent dans cette correspondance, oui. Les noms de clé qui ont dû être réécrits ne reviendront pas, pas plus que la distinction entre un tableau à un élément et une valeur seule, puisque les deux produisent un unique élément.