---
seo_title: API XML vers JSON — Convertir XML en JSON | EnConvert
meta_desc: Convertissez du XML en JSON via POST /v1/convert/xml-to-json. Attributs en clés préfixées @, éléments répétés en tableaux, wrappers root retirés automatiquement.
keywords: api xml vers json, convertir xml en json api, xml to json api rest, parser xml en json api, attributs xml en json, conversion xml json en ligne, xml vers tableau json api, upload xml convertir json
---

# API XML vers JSON

Convertissez un fichier XML en JSON avec une seule requête vers `POST /v1/convert/xml-to-json`. Le convertisseur déballe automatiquement les enveloppes `<root>` et `<root><item>` pour une sortie propre, représente les attributs XML par des clés `@attr` et le contenu textuel par `#text`, et transforme les éléments frères répétés en tableaux JSON. Les réponses renvoient les octets JSON bruts par défaut, ou des métadonnées avec une URL de téléchargement présignée lorsque `direct_download=false`.

---

## Endpoint

```
POST /v1/convert/xml-to-json
```

**Content-Type :** `multipart/form-data`

**Entrée acceptée :** fichiers `.xml` (encodés en UTF-8)

**Format de sortie :** `.json` (`application/json`)

---

## Authentification

Nécessite soit une clé API privée, soit un jeton JWT issu d'une clé publique.

```
X-API-Key: sk_live_your_private_key
```

Ou :

```
Authorization: Bearer <jwt_token>
```

---

## Paramètres de la requête

| Paramètre | Type | Requis | Par défaut | Description |
|-----------|------|--------|------------|-------------|
| `file` | file | Oui | -- | Le fichier `.xml` à convertir. Doit être encodé en UTF-8. |
| `output_filename` | `string` | Non | Nom du fichier d'entrée | Nom de fichier de sortie personnalisé. L'extension `.json` est ajoutée automatiquement. |
| `direct_download` | `boolean` | Non | `true` | Lorsque `true`, renvoie les octets JSON bruts. Lorsque `false`, renvoie des métadonnées avec une URL de téléchargement présignée. |

---

## Règles de conversion

- **XML simple** -- déballe automatiquement `<root>` :
  ```xml
  <root><name>Alice</name><age>30</age></root>
  ```
  Devient :
  ```json
  {"name": "Alice", "age": "30"}
  ```

- **Les éléments répétés** deviennent un tableau JSON (déballe automatiquement `<root>` et `<item>`) :
  ```xml
  <root><item><id>1</id></item><item><id>2</id></item></root>
  ```
  Devient :
  ```json
  [{"id": "1"}, {"id": "2"}]
  ```

- **Les attributs XML** sont préfixés par `@` :
  ```xml
  <user id="1" role="admin">Alice</user>
  ```
  Devient :
  ```json
  {"@id": "1", "@role": "admin", "#text": "Alice"}
  ```

La sortie est du JSON formaté avec une indentation de 2 espaces et l'unicode préservé. Les éléments frères répétés portant le même nom de balise deviennent automatiquement un tableau JSON.

---

## Réponse

### Téléchargement direct (`direct_download=true`, par défaut)

```
HTTP 200 OK
Content-Type: application/json
Content-Disposition: inline; filename="data_20260405_123456789.json"
```

### Réponse avec métadonnées (`direct_download=false`)

```json
{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/xml-to-json/data_20260405_123456789.json",
    "filename": "data_20260405_123456789.json",
    "file_size": 1234,
    "conversion_time_seconds": 0.05
}
```

---

## Exemples de code

### Python

```python
import requests

with open("data.xml", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/xml-to-json",
        headers={"X-API-Key": "sk_live_your_private_key"},
        files={"file": ("data.xml", f, "application/xml")}
    )

with open("data.json", "wb") as out:
    out.write(response.content)
```

### Node.js

```javascript
const form = new FormData();
form.append("file", fs.createReadStream("data.xml"));

const response = await fetch("https://api.enconvert.com/v1/convert/xml-to-json", {
    method: "POST",
    headers: { "X-API-Key": "sk_live_your_private_key" },
    body: form
});

const json = await response.json();
```

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/xml-to-json");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_live_your_private_key"],
    CURLOPT_POSTFIELDS => ["file" => new CURLFile("data.xml", "application/xml")]
]);
$json = curl_exec($ch);
curl_close($ch);
```

### Go

```go
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "data.xml")
file, _ := os.Open("data.xml")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/xml-to-json", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_live_your_private_key")
resp, _ := http.DefaultClient.Do(req)
```

---

## Réponses d'erreur

| Statut | Condition |
|--------|-----------|
| `400 Bad Request` | Le fichier n'est pas un fichier `.xml` |
| `400 Bad Request` | Échec de la conversion XML vers JSON (XML invalide) |
| `401 Unauthorized` | Clé API / jeton JWT manquant ou invalide |
| `402 Payment Required` | Limite mensuelle de conversions atteinte |
| `413 Payload Too Large` | Le fichier dépasse la taille maximale du forfait |

---

## Limites

| Limite | Valeur |
|--------|--------|
| Taille de fichier max | Dépend du forfait (Free : 5 MB) |
| Encodage d'entrée | UTF-8 uniquement |
| Conversions mensuelles | Dépend du forfait |

## Questions fréquentes

### Comment convertir du XML en JSON avec une API REST ?

Envoyez une requête POST `multipart/form-data` à `/v1/convert/xml-to-json` avec votre fichier `.xml` dans le champ `file`, authentifiée avec un en-tête `X-API-Key` ou un jeton JWT `Authorization: Bearer`. La réponse est du JSON formaté avec une indentation de 2 espaces.

### Comment les attributs XML sont-ils représentés dans la sortie JSON ?

Les attributs sont préfixés par `@` et le contenu textuel de l'élément devient une clé `#text`, donc `<user id="1" role="admin">Alice</user>` est converti en `{"@id": "1", "@role": "admin", "#text": "Alice"}`.

### Comment les éléments XML répétés sont-ils convertis en JSON ?

Les éléments frères répétés portant le même nom de balise deviennent automatiquement un tableau JSON, et les enveloppes `<root>` plus `<item>` sont déballées automatiquement — `<root><item>...</item><item>...</item></root>` devient un tableau JSON de premier niveau.

### Puis-je obtenir une URL de téléchargement présignée au lieu du JSON brut ?

Oui. Définissez `direct_download=false` pour recevoir des métadonnées avec `presigned_url`, `object_key`, `filename`, `file_size` et `conversion_time_seconds` au lieu des octets JSON bruts.

### Pourquoi l'API XML vers JSON renvoie-t-elle 400 Bad Request ?

Un `400` est renvoyé lorsque le fichier n'est pas un fichier `.xml` ou que le XML est invalide et que la conversion échoue. Les fichiers trop volumineux renvoient `413 Payload Too Large`, et le dépassement de votre limite mensuelle de conversions renvoie `402 Payment Required`.
