---
seo_title: API JSON vers CSV | Convertir un tableau JSON en CSV | EnConvert
meta_desc: Convertissez du JSON en CSV via POST /v1/convert/json-to-csv. Requiert un tableau JSON d'objets, en-têtes issus du premier objet. Sortie délimitée par virgules.
keywords: api json vers csv, convertir json en csv api, json to csv api rest, tableau json en csv api, exporter json en csv api, objets json en lignes csv, json vers csv endpoint, aplatir json en csv api
---

# API JSON vers CSV

Convertissez un fichier JSON en CSV avec une seule requête vers `POST /v1/convert/json-to-csv`. L'entrée doit être un tableau JSON d'objets ; les en-têtes de colonnes sont dérivés des clés du premier objet et les lignes sont délimitées par des virgules avec le mode de guillemets `QUOTE_MINIMAL`. Par défaut, la réponse contient les octets CSV bruts ; définissez `direct_download=false` pour recevoir à la place des métadonnées avec une URL de téléchargement présignée.

---

## Endpoint

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

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

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

**Format de sortie :** `.csv` (`text/csv`)

---

## Authentification

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

```
X-API-Key: sk_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 `.json` à convertir. Doit contenir un tableau JSON d'objets. Encodé en UTF-8. |
| `output_filename` | `string` | Non | Nom du fichier d'entrée | Nom de fichier de sortie personnalisé. L'extension `.csv` est ajoutée automatiquement. |
| `direct_download` | `boolean` | Non | `true` | Lorsque `true`, renvoie les octets CSV bruts. Lorsque `false`, renvoie des métadonnées avec une URL de téléchargement présignée. |

---

## Règles de conversion

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

Devient :

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

- L'entrée **doit** être un tableau JSON d'objets (liste de dictionnaires)
- Les en-têtes de colonnes sont dérivés **uniquement des clés du premier objet**
- Le délimiteur est la virgule (non configurable)
- Les guillemets suivent `QUOTE_MINIMAL` -- les valeurs contenant des virgules, des guillemets ou des sauts de ligne sont entourées de guillemets
- Les objets ou tableaux imbriqués dans les valeurs sont sérialisés sous leur représentation en chaîne (non aplatis)

<div class="alert alert-warning">
<strong>Important :</strong> Si les objets du tableau ont des clés différentes, les clés supplémentaires des objets ultérieurs sont silencieusement ignorées. Les clés manquantes produisent des valeurs vides. Pour de meilleurs résultats, assurez-vous que tous les objets possèdent le même ensemble de clés.
</div>

---

## Réponse

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

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

### Réponse avec métadonnées (`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
}
```

---

## Exemples de code

### 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)
```

---

## Réponses d'erreur

| Statut | Condition |
|--------|-----------|
| `400 Bad Request` | Le fichier n'est pas un fichier `.json` |
| `400 Bad Request` | Contenu JSON invalide |
| `400 Bad Request` | Le JSON doit être un tableau d'objets pour la conversion en CSV |
| `400 Bad Request` | Le tableau JSON est vide |
| `400 Bad Request` | Le tableau JSON doit contenir des objets (dictionnaires) |
| `401 Unauthorized` | Clé API / jeton JWT manquant ou invalide |
| `402 Payment Required` | Quota mensuel d'ops épuisé |
| `413 Payload Too Large` | Le fichier dépasse la taille maximale du forfait |

---

## Limites

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

## Questions fréquentes

### Comment convertir un tableau JSON en CSV avec une API REST ?

Envoyez une requête POST `multipart/form-data` à `/v1/convert/json-to-csv` avec un fichier `.json` contenant un tableau d'objets 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 CSV délimité par des virgules.

### Que se passe-t-il si les objets JSON ont des clés différentes ?

Les en-têtes de colonnes proviennent uniquement des clés du premier objet. Les clés supplémentaires des objets ultérieurs sont silencieusement ignorées et les clés manquantes produisent des valeurs vides ; assurez-vous donc que tous les objets partagent le même ensemble de clés pour de meilleurs résultats.

### Les objets JSON imbriqués sont-ils aplatis en colonnes CSV ?

Non. Les objets ou tableaux imbriqués dans les valeurs sont sérialisés sous leur représentation en chaîne plutôt qu'aplatis en colonnes séparées.

### Puis-je changer le délimiteur CSV ?

Non. Le délimiteur est toujours la virgule et n'est pas configurable. Les guillemets suivent `QUOTE_MINIMAL`, donc les valeurs contenant des virgules, des guillemets ou des sauts de ligne sont automatiquement entourées de guillemets.

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

Un `400` est renvoyé lorsque le fichier n'est pas un `.json`, que le JSON est invalide, que le JSON n'est pas un tableau d'objets ou que le tableau est vide. Les fichiers trop volumineux renvoient `413 Payload Too Large`.
