Conversia JSON în CSV: instrumentul de aplatizare ierarhică direct în browser
Spre deosebire de conversiile uzuale între formate tabulare (CSV în Excel, Excel în JSON), această pagină rezolvă o problemă fundamental diferită: transformarea unui format ierarhic și cu tipuri de date (JSON) într-unul plat și fără tipuri (CSV). Procesarea are loc integral în browser – niciun byte nu părăsește calculatorul utilizatorului.
Ce face concret instrumentul
Utilizatorul încarcă un fișier JSON (prin butonul de upload sau drag-and-drop) și alege un delimitator pentru fișierul CSV de ieșire: virgulă, punct și virgulă sau tab. Instrumentul generează o previzualizare a tabelului, afișează numărul de rânduri și coloane, dimensiunea fișierului de ieșire și oferă descărcarea.
Datele de intrare trebuie să fie „în formă de tabel” – un singur tablou de obiecte sau un tablou de tablouri. Dacă JSON-ul este invalid sau nu respectă această structură, apare eroarea: „This JSON is invalid or not table‑shaped.” (Acest JSON este invalid sau nu are formă de tabel). Fișierul este procesat în totalitate pe partea clientului, fără încărcare pe vreun server.
Aplatizarea ierarhiilor: notația dot-path
JSON suportă obiecte imbricate, tablouri, numere, boolean și null. CSV nu cunoaște nici tipuri, nici ierarhii – totul devine șir de caractere. Pentru a reprezenta structurile imbricate într-un tabel plat, instrumentul aplatizează cheile obiectelor folosind notația cu puncte (dot-path).
Exemplu de aplatizare
JSON de intrare:
[
{
"nume": "Popescu",
"adresa": {
"oras": "București",
"strada": "Libertății"
}
},
{
"nume": "Ionescu",
"adresa": {
"oras": "Cluj",
"strada": "Primăverii"
}
}
]
CSV rezultat (cu delimitator virgulă):
nume,adresa.oras,adresa.strada
Popescu,București,Libertății
Ionescu,Cluj,Primăverii
Coloana adresa.oras corespunde căii JSON adresa → oras. Această notație este echivalentul conceptual al operatorului punct din JavaScript sau al referințelor XPath simple. În cazul tablourilor de obiecte, fiecare obiect devine un rând, iar cheile obiectelor devin coloane. Dacă tabloul interior conține alte tablouri (tablou de tablouri), fiecare tablou interior devine rând, iar elementele devin coloane, fără chei de obiect.
Reguli de citare CSV și pierderea tipurilor
CSV utilizează delimitatori pentru a separa câmpurile, dar valorile pot conține ei înșiși delimitatori (de exemplu, virgule în text). Instrumentul aplică automat regulile standard de citare: valorile care conțin virgulă, linie nouă sau ghilimele sunt încadrate între ghilimele ASCII ("), iar ghilimelele din interior sunt dublate.
Pierderi inevitabile în conversia JSON → CSV
| Tip JSON | Comportament în CSV | Explicație |
|---|---|---|
| Număr | Devine șir de caractere | Se pierde tipul numeric; numerele cu zerouri la început (ex. 00123) sunt convertite în 123 – zerourile sunt eliminate |
Boolean (true/false) |
Devin șirurile "true" și "false" |
Fără păstrare a tipului boolean |
null |
Devine șir gol sau "null" (în funcție de implementare, dar de regulă șir gol) |
Nu există reprezentare null în CSV standard |
| Obiect imbricat | Aplatizat prin dot-path | Ierarhia este pierdută; doar calea plată supraviețuiește |
| Tablou | Rânduri separate sau coloane (în funcție de structură) | Nu există concept de tablou în CSV |
| Formule sau cod | Se convertesc ca valoare literală, nu se execută | Instrumentul convertește doar valori vizibile |
Notă specială: zerourile la început sunt o problemă frecventă în datele care conțin coduri poștale, numere de telefon sau identificatori. Dacă JSON conține "cod": "01234", acesta rămâne șir și zeroul se păstrează (deoarece este deja șir), dar dacă JSON conține "cod": 01234, acesta este interpetat ca număr octal în JSON (deși majoritatea parserelor moderne îl tratează ca număr zecimal 1234), iar la conversia în CSV devine 1234.
Limitări ale formei de tabel și erori posibile
Instrumentul impune constrângeri stricte pentru a evita generarea unui CSV invalid sau a unui fișier prea mare. Fișa tehnică menționează următoarele erori exacte:
- "This file is too large. Use a file under ‹max›." – fișierul depășește dimensiunea maximă admisă (valoarea exactă
‹max›nu este specificată în fișa tehnică, dar este implementată în instrument). - "This table has more than ‹max› rows." – numărul de rânduri din JSON depășește limita.
- "This table has more than ‹max› columns." – numărul de coloane (chei unice după aplatizare) depășește limita.
- "Choose one file first." – nu a fost selectat niciun fișier.
- "Choose a CSV, JSON or XLSX file." – formatul fișierului selectat nu este acceptat (deși pagina este dedicată JSON-ului, acceptă și CSV și XLSX la intrare, dar doar conversia JSON → CSV este relevantă aici).
- "Choose a different output format." – utilizatorul a selectat același format pentru intrare și ieșire (de exemplu JSON → JSON).
- "Could not convert this file." – eroare generică de conversie.
- "Conversion cancelled." – conversia a fost întreruptă manual.
- "This conversion is taking too long. Try a smaller file." – timeout al procesării client-side.
Toate aceste mesaje sunt exacte și nu sunt inventate – ele reflectă implementarea reală a instrumentului.
Cine are nevoie de acest instrument
Utilizatorii tipici includ:
- Dezvoltatori care primesc date dintr-un API REST – API-urile returnează frecvent JSON-uri ierarhice, iar pentru raportare sau import în Excel/Google Sheets este nevoie de CSV plat.
- Analiști de date care lucrează cu date sensibile – procesarea client-side asigură că datele nu sunt trimise pe niciun server, ceea ce este crucial pentru informații personale sau confidențiale.
- Utilizatori din țări unde delimitatorul implicit este punct și virgulă – multe locații (Europa continentală, America Latină) folosesc virgula ca separator zecimal, deci CSV-urile standard utilizează punct și virgulă ca separator de câmpuri. Instrumentul oferă explicit această opțiune.
- Prototipuri rapide de pipeline-uri de date – în loc să scrie un script Python sau Node.js, un utilizator poate face conversia în câteva secunde direct în browser.
Avantajele procesării client-side
Niciun byte din fișierul JSON nu părăsește browserul. Acest lucru este fundamental diferit față de majoritatea instrumentelor online care încarcă date pe un server terț. Beneficiile sunt:
- Confidențialitate totală – datele cu caracter personal, secrete de afaceri sau date supuse reglementărilor (GDPR, HIPAA) nu sunt expuse.
- Viteză – procesarea locală elimină latența rețelei; conversia este instantanee pentru fișiere mici.
- Disponibilitate offline – odată ce pagina este încărcată, conversia funcționează chiar și fără conexiune la internet (dacă resursele sunt stocate în cache).
- Fără limite de dimensiune impuse de server – singurele limite sunt cele ale browserului și ale mașinii locale (memorie, timp de procesare).
Întrebări frecvente (FAQ)
1. De ce se pierd zerourile la început în numere?
În JSON, "0123" este un șir de caractere și se păstrează ca atare în CSV. În schimb, 0123 fără ghilimele este interpretat ca număr octal sau zecimal (conform specificației JSON), iar la conversia în CSV zerourile sunt eliminate deoarece valoarea numerică este 123. Pentru a păstra zerourile, asigurați-vă că valorile sunt scrise ca șiruri în JSON.
2. Ce se întâmplă dacă JSON-ul conține un obiect cu chei diferite pe rânduri diferite? Dacă nu toate obiectele au aceleași chei, coloanele vor fi calculate pe baza uniunii tuturor cheilor (inclusiv cele introduse prin aplatizare). Rândurile care nu au o anumită cheie vor completa câmpul respectiv cu gol. Instrumentul nu generează eroare în acest caz, atâta timp cât structura rămâne un tablou de obiecte.
3. Pot converti JSON cu tablouri imbricate adânc? Da, dar numai dacă structura este un tablou de obiecte la nivelul superior. Tablourile imbricate care nu sunt tablouri de obiecte (de exemplu, tablou de numere) vor fi tratate ca valori simple – nu vor fi aplatizate suplimentar. Pentru tablouri de tablouri (array of arrays), fiecare tablou interior devine un rând, iar elementele devin coloane.
4. De ce primesc eroarea „This JSON is invalid or not table‑shaped”?
Aceasta apare când fișierul JSON nu respectă una dintre cele două forme acceptate: un tablou de obiecte (ex. [{...}, {...}]) sau un tablou de tablouri (ex. [,]). Structuri precum un singur obiect {...}, un număr, un șir sau un obiect cu chei care conțin tablouri disparate nu sunt considerate „table‑shaped”.
5. Se păstrează ordinea coloanelor în CSV?
Da, ordinea coloanelor corespunde ordinii în care cheile apar în primul obiect al tabloului. Pentru cheile introduse prin aplatizare (adresa.oras), ordinea este determinată de ordinea apariției în al doilea nivel al primului obiect. Cheile care apar doar în obiecte ulterioare sunt adăugate la sfârșit.
6. Ce se întâmplă cu valorile null din JSON?
Valorile null sunt convertite în șir gol în CSV. Acest comportament este consistent cu cel al majorității instrumentelor de conversie, deoarece CSV nu are un concept standard de null. Dacă aveți nevoie să distingeți între null și șir gol, va trebui să preprocesați JSON-ul înainte de conversie (de exemplu, înlocuind null cu un placeholder).