---
seo_title: API XML in JSON | Converti file XML in JSON | EnConvert
meta_desc: Converti XML in JSON con POST /v1/convert/xml-to-json. Gli attributi diventano chiavi con prefisso @, gli elementi ripetuti array; i wrapper root vengono rimossi.
keywords: api xml in json, convertire xml in json api, xml to json api, api rest xml json, convertitore xml json api, attributi xml in json, xml in array json api, caricare xml convertire in json
---

# API XML in JSON

Converti un file XML in JSON con una singola richiesta a `POST /v1/convert/xml-to-json`. Il convertitore rimuove automaticamente i wrapper `<root>` e `<root><item>` per un output pulito, rappresenta gli attributi XML come chiavi `@attr` e il contenuto testuale come `#text`, e trasforma gli elementi fratelli ripetuti in array JSON. Le risposte restituiscono byte JSON grezzi per default, oppure metadati con un URL di download presigned quando `direct_download=false`.

---

## Endpoint

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

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

**Input accettato:** file `.xml` (codificati in UTF-8)

**Formato di output:** `.json` (`application/json`)

---

## Autenticazione

Richiede una chiave API privata oppure un token JWT ottenuto da una chiave pubblica.

```
X-API-Key: sk_your_private_key
```

Oppure:

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

---

## Parametri della richiesta

| Parametro | Tipo | Obbligatorio | Default | Descrizione |
|-----------|------|----------|---------|-------------|
| `file` | file | Sì | -- | Il file `.xml` da convertire. Deve essere codificato in UTF-8. |
| `output_filename` | `string` | No | Nome del file di input | Nome file di output personalizzato. L'estensione `.json` viene aggiunta automaticamente. |
| `direct_download` | `boolean` | No | `true` | Con `true`, restituisce i byte JSON grezzi. Con `false`, restituisce metadati con un URL di download presigned. |

---

## Regole di conversione

- **XML semplice** -- il wrapper `<root>` viene rimosso automaticamente:
  ```xml
  <root><name>Alice</name><age>30</age></root>
  ```
  Diventa:
  ```json
  {"name": "Alice", "age": "30"}
  ```

- **Gli elementi ripetuti** diventano un array JSON (rimozione automatica di `<root>` e `<item>`):
  ```xml
  <root><item><id>1</id></item><item><id>2</id></item></root>
  ```
  Diventa:
  ```json
  [{"id": "1"}, {"id": "2"}]
  ```

- **Gli attributi XML** ricevono il prefisso `@`:
  ```xml
  <user id="1" role="admin">Alice</user>
  ```
  Diventa:
  ```json
  {"@id": "1", "@role": "admin", "#text": "Alice"}
  ```

L'output è JSON formattato con indentazione a 2 spazi e unicode preservato. Gli elementi fratelli ripetuti con lo stesso nome di tag diventano automaticamente un array JSON.

---

## Risposta

### Download diretto (`direct_download=true`, default)

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

### Risposta con metadati (`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
}
```

---

## Esempi di codice

### 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_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_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_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_your_private_key")
resp, _ := http.DefaultClient.Do(req)
```

---

## Risposte di errore

| Stato | Condizione |
|--------|-----------|
| `400 Bad Request` | Il file non è un file `.xml` |
| `400 Bad Request` | Conversione da XML a JSON non riuscita (XML non valido) |
| `401 Unauthorized` | Chiave API / token JWT mancante o non valido |
| `402 Payment Required` | Quota mensile di ops esaurita |
| `413 Payload Too Large` | Il file supera la dimensione massima del piano |

---

## Limiti

| Limite | Valore |
|-------|-------|
| Dimensione massima del file | Dipende dal piano (Founding: 5 MB) |
| Codifica di input | Solo UTF-8 |
| Conversioni mensili | Dipende dal piano |

## Domande frequenti

### Come converto XML in JSON con una API REST?

Invia una richiesta POST `multipart/form-data` a `/v1/convert/xml-to-json` con il file `.xml` nel campo `file`, autenticandoti con un header `X-API-Key` o un token JWT `Authorization: Bearer`. La risposta è JSON formattato con indentazione a 2 spazi.

### Come vengono rappresentati gli attributi XML nell'output JSON?

Gli attributi ricevono il prefisso `@` e il contenuto testuale dell'elemento diventa una chiave `#text`, quindi `<user id="1" role="admin">Alice</user>` viene convertito in `{"@id": "1", "@role": "admin", "#text": "Alice"}`.

### Come vengono convertiti in JSON gli elementi XML ripetuti?

Gli elementi fratelli ripetuti con lo stesso nome di tag diventano automaticamente un array JSON, e i wrapper `<root>` e `<item>` vengono rimossi automaticamente. Così `<root><item>...</item><item>...</item></root>` diventa un array JSON di primo livello.

### Posso ottenere un URL di download presigned invece del JSON grezzo?

Sì. Imposta `direct_download=false` per ricevere metadati con `presigned_url`, `object_key`, `filename`, `file_size` e `conversion_time_seconds` invece dei byte JSON grezzi.

### Perché l'API XML in JSON restituisce 400 Bad Request?

Un `400` viene restituito quando il file non è un file `.xml` oppure l'XML non è valido e la conversione fallisce. I file troppo grandi restituiscono `413 Payload Too Large`, mentre l'esaurimento della quota mensile di ops restituisce `402 Payment Required`.
