Conversia CSV în JSON și înapoi, fără să strici datele
CSV este un tabel în text simplu: o înregistrare pe rând, cu câmpuri separate printr-un delimitator, de obicei virgula. Se strică atunci când un câmp conține delimitatorul, o ghilimea dublă sau un rând nou, pentru că cititorul trebuie să deosebească structura de conținut. Respectă regulile de ghilimele, verifică delimitatorul și rândul de antet și păstrează numerele cu zerouri de început ca text. Restul articolului explică ce poate și ce nu poate păstra o conversie dus-întors.
Convertor CSV în JSONAm nevoie de CSV ca JSON sau inversÎncearcă gratuitCe este de fapt un fișier CSV
CSV nu are un standard unic și oficial, dar RFC 4180 descrie forma comună, pe care o urmează majoritatea cititoarelor. Regulile sale de bază încap într-o listă scurtă:
- Fiecare înregistrare stă pe propriul rând, iar RFC-ul spune că rândurile se termină cu CRLF, adică retur de car și avans de linie.
- Câmpurile sunt separate prin virgule.
- Un câmp care conține o virgulă, o ghilimea dublă sau un rând nou este pus între ghilimele duble.
- Într-un câmp între ghilimele, o ghilimea dublă se scrie ca două ghilimele duble.
Deci rândul 1001,"Smith, Ann",02134 are trei câmpuri, pentru că virgula din ghilimele face parte din conținut. Un program care taie la fiecare virgulă găsește patru. Cititorul fixmint aplică aceste reguli: un câmp între ghilimele poate conține delimitatorul, rânduri noi și ghilimele duble, iar o ghilimea nedeschisă este raportată împreună cu rândul la care începe.
De ce se schimbă delimitatorul
Virgula este delimitatorul implicit din RFC, dar acolo unde virgula este separator zecimal, astfel că 1,5 înseamnă unu și jumătate, programele de calcul tabelar salvează adesea CSV cu punct și virgulă. Fișierele separate prin tab (TSV) evită conflictul în majoritatea datelor, pentru că tab-urile apar rar în text.
Meniul Delimitator oferă Automat, Virgulă, Punct și virgulă, Tab și Bară verticală. Automat citește primele zece rânduri, numără fiecare candidat în afara ghilimelelor și alege pe cel al cărui număr pe rând este cel mai constant. Alege delimitatorul tu când Automat ghicește greșit.
Conversia în fixmint
Exemplul lucrat folosește opțiunile implicite ale Convertorului CSV în JSON.
Exemplu lucrat
Lipește acest CSV, cu Primul rând este antet bifat:
id,name,zip,note
1001,"Smith, Ann",02134,"She said ""hi"""
1002,Bo,10001,"line one
line two"
Cu Convertește numerele dezactivat și Indentare JSON setată la 2 spații, instrumentul returnează:
[
{
"id": "1001",
"name": "Smith, Ann",
"zip": "02134",
"note": "She said \"hi\""
},
{
"id": "1002",
"name": "Bo",
"zip": "10001",
"note": "line one\nline two"
}
]
Cu Convertește numerele activat, id și zip 10001 devin numere, iar 02134 rămâne text.
Pași
- Lipește CSV-ul sau trage un fișier .csv, .tsv, .txt sau .json.
- Verifică Primul rând este antet, Delimitatorul și Convertește numerele. Alege indentarea JSON de 2 spații, Tab sau Minificat.
- Copiază rezultatul sau descarcă-l ca .json.
Păstrează numerele ca text
Numerele JSON nu pot avea zerouri de început, deci 02134 nu este un număr JSON valid. Codurile poștale, numerele de telefon și codurile de produs trebuie să rămână text, altfel zeroul dispare. Cu Convertește numerele activat, instrumentul convertește 10001, dar păstrează 02134 ca șir de caractere. Opțiunea este dezactivată implicit. Convertește doar valorile care au un punct ca separator zecimal, deci 1,5 dintr-un fișier cu punct și virgulă rămâne așa cum l-ai scris.
Identificatorii lungi necesită atenție și ei. JavaScript, care procesează majoritatea JSON-ului din browser, stochează numerele ca valori în virgulă mobilă pe 64 de biți. Numerele întregi sunt exacte doar până la 9.007.199.254.740.991, adică doi la puterea 53 minus 1. Numărul 12345678901234567890 devine 12345678901234567000 atunci când îl citește un program JavaScript. Instrumentul scrie cifrele exact cum le-ai introdus, dar un program care analizează JSON-ul în JavaScript le va rotunji. Păstrează ID-urile ca șiruri de caractere. Instrumentul Formatează JSON păstrează și el asemenea numere exact cum sunt scrise și îți spune câte a păstrat.
JSON imbricat și întoarcerea la CSV
CSV este plat, iar JSON poate fi imbricat. Convertirea JSON în CSV creează câte o coloană pentru fiecare cheie din toate obiectele, în ordinea în care apare prima dată fiecare cheie. Un obiect sau o listă imbricată ajunge în celula sa ca text JSON, un null devine celulă goală, iar true și false sunt scrise ca atare. Rândurile sunt unite prin CRLF, iar un câmp este pus între ghilimele doar când conține delimitatorul, o ghilimea, un rând nou sau spații la unul dintre capete.
Intrarea care începe cu [ sau { este citită ca JSON. Butonul-pastilă schimbă direcția, etichetat CSV → JSON sau JSON → CSV. În direcția JSON → CSV, opțiunile de ieșire arată un meniu Delimitator și o opțiune Pentru Excel.
O conversie dus-întors pierde informație. Un null și un șir gol devin amândouă o celulă goală, iar imbricarea nu se mai reface, deci păstrează JSON-ul original dacă ai nevoie de structura lui.
Excel, UTF-8 și marcajul BOM
Un fișier CSV este o succesiune de octeți, iar cititorul trebuie să știe codarea. UTF-8 păstrează literele cu diacritice și alte alfabete. Un marcaj de ordine a octeților (BOM), adică trei octeți la începutul fișierului, indică faptul că fișierul este UTF-8. Fără el, unele programe de calcul tabelar citesc fișierul într-o pagină de cod locală, iar literele cu diacritice devin caractere ciudate. Programele de calcul tabelar transformă adesea și 02134 în 2134 când deschid un CSV.
Opțiunea Pentru Excel adaugă marcajul BOM doar în CSV-ul descărcat, niciodată în textul copiat, și doar în direcția JSON → CSV. Instrumentul elimină un BOM din intrare, deci un fișier care îl are deja se convertește fără eroare.
Cazuri speciale
- Rânduri inegale. Cu antet activat, un rând scurt este completat cu valori goale, iar un rând mai lung își păstrează valorile în plus ca column_N. Rezultatul arată câte rânduri diferă de antet.
- Antete repetate sau goale. Un nume repetat primește _2, _3 și așa mai departe, iar un nume gol devine column_N. Ambele modificări împiedică două chei să se suprascrie reciproc.
- Ghilimele curbe. Ghilimelele inteligente din procesorul de text nu sunt ghilimele CSV, deci un câmp precum “Smith, Ann” se desparte la virgulă. Îndreaptă-le mai întâi cu Repară textul lipit sau cum este descris în ghidul despre ghilimelele curbe.
- Rânduri noi între ghilimele. Un câmp care se întinde pe două rânduri este o singură înregistrare, dar Elimină rândurile duplicate desparte intrarea la fiecare rând nou, deci ar trata cele două jumătăți ca rânduri separate. Convertește în JSON și compară obiectele sau verifică manual. Instrumentul rămâne util pentru listele cu o valoare pe rând.
- Fișiere mari. Caseta cu rezultatul arată primele 100.000 de caractere, dar Copiază și descărcarea includ întregul rezultat.
- JSON invalid. Convertorul raportează rândul și coloana unei erori, cu un semn ^ sub caracterul din eroare. Instrumentul Formatează JSON explică greșelile frecvente, iar ghidul despre erorile JSON le detaliază.
Spațiile în plus în jurul câmpurilor, rândurile goale din mijlocul fișierului și ghilimelele folosite inconsecvent cauzează majoritatea problemelor CSV, înainte ca delimitatorul să conteze. Curăță mai întâi CSV-ul, apoi convertește.
Tradus din Original în engleză cu ajutorul AI.
Comentarii
Încă nu sunt comentarii. Fii primul.


