---
seo_title: API JSON in CSV | Converti array JSON in CSV | EnConvert
meta_desc: Converti JSON in CSV con POST /v1/convert/json-to-csv. Richiede un array JSON di oggetti; intestazioni dalle chiavi del primo oggetto. Output separato da virgole.
keywords: api json in csv, convertire json in csv api, json to csv api, array json in csv api, esportare json in csv api, convertitore json csv api, json in righe csv, endpoint json to csv
---

# API JSON in CSV

Converti un file JSON in CSV con una singola richiesta a `POST /v1/convert/json-to-csv`. L'input deve essere un array JSON di oggetti; le intestazioni di colonna derivano dalle chiavi del primo oggetto e le righe sono delimitate da virgole con quoting `QUOTE_MINIMAL`. Per default la risposta è costituita dai byte CSV grezzi; imposta `direct_download=false` per ricevere invece metadati con un URL di download presigned.

---

## Endpoint

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

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

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

**Formato di output:** `.csv` (`text/csv`)

---

## 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 `.json` da convertire. Deve contenere un array JSON di oggetti. Codificato in UTF-8. |
| `output_filename` | `string` | No | Nome del file di input | Nome file di output personalizzato. L'estensione `.csv` viene aggiunta automaticamente. |
| `direct_download` | `boolean` | No | `true` | Con `true`, restituisce i byte CSV grezzi. Con `false`, restituisce metadati con un URL di download presigned. |

---

## Regole di conversione

```json
[
  {"name": "Alice", "age": 30, "city": "London"},
  {"name": "Bob", "age": 25, "city": "Paris"}
]
```

Diventa:

```csv
name,age,city
Alice,30,London
Bob,25,Paris
```

- L'input **deve** essere un array JSON di oggetti (lista di dizionari)
- Le intestazioni di colonna derivano **solo dalle chiavi del primo oggetto**
- Il delimitatore è la virgola (non configurabile)
- Il quoting segue `QUOTE_MINIMAL` -- i valori che contengono virgole, virgolette o newline vengono racchiusi tra virgolette
- Gli oggetti o array annidati nei valori vengono serializzati come rappresentazione stringa (non appiattiti)

<div class="alert alert-warning">
<strong>Importante:</strong> Se gli oggetti dell'array hanno chiavi diverse, le chiavi aggiuntive negli oggetti successivi vengono scartate silenziosamente. Le chiavi mancanti producono valori vuoti. Per risultati ottimali, assicurati che tutti gli oggetti abbiano lo stesso insieme di chiavi.
</div>

---

## Risposta

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

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

### Risposta con metadati (`direct_download=false`)

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

---

## Esempi di codice

### Python

```python
import requests

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

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

### Node.js

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

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

const csv = await response.text();
```

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/json-to-csv");
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.json", "application/json")]
]);
$csv = curl_exec($ch);
curl_close($ch);
```

### Go

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

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/json-to-csv", 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 `.json` |
| `400 Bad Request` | Contenuto JSON non valido |
| `400 Bad Request` | Il JSON deve essere un array di oggetti per la conversione in CSV |
| `400 Bad Request` | L'array JSON è vuoto |
| `400 Bad Request` | L'array JSON deve contenere oggetti (dizionari) |
| `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 |
| Struttura di input | Solo array di oggetti |
| Conversioni mensili | Dipende dal piano |

## Domande frequenti

### Come converto un array JSON in CSV con una API REST?

Invia una richiesta POST `multipart/form-data` a `/v1/convert/json-to-csv` con un file `.json` contenente un array di oggetti nel campo `file`, autenticandoti con un header `X-API-Key` o un token JWT `Authorization: Bearer`. La risposta è CSV delimitato da virgole.

### Cosa succede se gli oggetti JSON hanno chiavi diverse?

Le intestazioni di colonna derivano solo dalle chiavi del primo oggetto. Le chiavi aggiuntive negli oggetti successivi vengono scartate silenziosamente e le chiavi mancanti producono valori vuoti, quindi per risultati ottimali assicurati che tutti gli oggetti condividano lo stesso insieme di chiavi.

### Gli oggetti JSON annidati vengono appiattiti in colonne CSV?

No. Gli oggetti o array annidati nei valori vengono serializzati come rappresentazione stringa invece di essere appiattiti in colonne separate.

### Posso cambiare il delimitatore CSV?

No. Il delimitatore è sempre la virgola e non è configurabile. Il quoting segue `QUOTE_MINIMAL`, quindi i valori che contengono virgole, virgolette o newline vengono racchiusi tra virgolette automaticamente.

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

Un `400` viene restituito quando il file non è `.json`, il JSON non è valido, il JSON non è un array di oggetti o l'array è vuoto. I file troppo grandi restituiscono `413 Payload Too Large`.
