CSV naar JSON en terug omzetten zonder gegevens te verliezen
CSV is een tabel in platte tekst: één record per regel, met velden die gescheiden worden door een scheidingsteken, meestal een komma. Het gaat mis wanneer een veld het scheidingsteken, een dubbel aanhalingsteken of een regeleinde bevat, omdat de lezer structuur en inhoud uit elkaar moet houden. Houd je aan de regels voor aanhalingstekens, controleer het scheidingsteken en de kopregel, en bewaar getallen met voorloopnullen als tekst. De rest van dit artikel gaat over wat een heen-en-weerconversie wel en niet kan bewaren.
CSV naar JSONCSV omzetten naar JSON, of terugGratis doenWat een CSV-bestand echt is
CSV heeft geen enkele gezaghebbende standaard, maar RFC 4180 beschrijft de gangbare vorm, en de meeste lezers volgen die. De kernregels passen in een korte lijst:
- Elk record staat op een eigen regel, en volgens de RFC eindigen regels met een carriage return en een line feed, CRLF.
- Velden worden gescheiden door komma's.
- Een veld dat een komma, een dubbel aanhalingsteken of een regeleinde bevat, staat tussen dubbele aanhalingstekens.
- Een dubbel aanhalingsteken binnen een veld tussen aanhalingstekens wordt geschreven als twee dubbele aanhalingstekens.
De rij 1001,"Smith, Ann",02134 heeft dus drie velden, omdat de komma tussen de aanhalingstekens deel van de inhoud is. Een splitser die bij elke komma knipt, vindt er vier. De lezer van fixmint past deze regels toe: een veld tussen aanhalingstekens mag het scheidingsteken, regeleinden en verdubbelde aanhalingstekens bevatten, en een niet-gesloten aanhalingsteken wordt gemeld met de regel waar het begint.
Waarom het scheidingsteken verandert
De komma is de standaard van de RFC, maar waar de komma het decimaalteken is, zodat 1,5 anderhalf betekent, slaan spreadsheets CSV vaak op met puntkomma's. Tabgescheiden bestanden (TSV) voorkomen het conflict in de meeste gegevens, omdat tabs zelden in tekst voorkomen.
Het menu Scheidingsteken biedt Auto, Komma, Puntkomma, Tab en Pipe. Auto leest de eerste tien regels, telt elk kandidaat-teken buiten aanhalingstekens en kiest het teken met het meest consistente aantal per regel. Kies zelf het scheidingsteken als Auto het verkeerd raadt.
Omzetten in fixmint
Het uitgewerkte voorbeeld gebruikt de standaardopties van de CSV naar JSON-tool.
Uitgewerkt voorbeeld
Plak deze CSV, met Eerste rij is een kopregel aangevinkt:
id,name,zip,note
1001,"Smith, Ann",02134,"She said ""hi"""
1002,Bo,10001,"line one
line two"
Met Getallen omzetten uit en JSON-inspringing op 2 spaties geeft de tool dit terug:
[
{
"id": "1001",
"name": "Smith, Ann",
"zip": "02134",
"note": "She said \"hi\""
},
{
"id": "1002",
"name": "Bo",
"zip": "10001",
"note": "line one\nline two"
}
]
Met Getallen omzetten aan worden id en de waarde 10001 in zip getallen, en 02134 blijft tekst.
Stappen
- Plak de CSV, of sleep een .csv-, .tsv-, .txt- of .json-bestand erheen.
- Controleer Eerste rij is een kopregel, het Scheidingsteken en Getallen omzetten. Kies een JSON-inspringing van 2 spaties, Tab of Compact.
- Kopieer het resultaat, of download het als .json.
Getallen als tekst bewaren
JSON-getallen mogen geen voorloopnullen hebben, dus 02134 is geen geldig JSON-getal. Postcodes, telefoonnummers en productcodes moeten tekst blijven, anders verdwijnt de nul. Met Getallen omzetten aan zet de tool 10001 om, maar blijft 02134 als tekst (string) bewaren. De optie staat standaard uit. Alleen waarden met een punt als decimaalscheidingsteken worden omgezet, dus 1,5 in een puntkommabestand blijft zoals getypt.
Lange identificatienummers vragen ook om aandacht. JavaScript, dat de meeste JSON in de browser verwerkt, slaat getallen op als 64-bits drijvendekommawaarden. Gehele getallen zijn alleen exact tot en met 9.007.199.254.740.991, dat is 2 tot de 53e macht min 1. Het getal 12345678901234567890 wordt 12345678901234567000 wanneer een JavaScript-programma het leest. De tool schrijft de cijfers zoals getypt, maar een programma dat de JSON in JavaScript verwerkt, rondt ze af. Bewaar ID's als tekst. De JSON-opmaker bewaart zulke getallen precies zoals ingetypt, en meldt hoeveel het er heeft bewaard.
Geneste JSON en terug naar CSV
CSV is plat en JSON kan genest zijn. Bij het omzetten van JSON naar CSV ontstaat voor elke sleutel over alle objecten één kolom, in de volgorde waarin elke sleutel voor het eerst voorkomt. Een genest object of een lijst komt in zijn cel als JSON-tekst, een null wordt een lege cel, en true en false worden als woorden geschreven. Rijen worden met CRLF aan elkaar gekoppeld, en een veld wordt alleen tussen aanhalingstekens gezet wanneer het het scheidingsteken, een aanhalingsteken, een regeleinde of spaties aan een van beide kanten bevat.
Invoer die begint met [ of { wordt als JSON gelezen. Met de wisselknop schakel je de richting om; het label is CSV → JSON of JSON → CSV. In de richting JSON → CSV tonen de uitvoeropties een menu Scheidingsteken en een optie Voor Excel.
Een heen-en-weerconversie verliest informatie. Een null en een lege tekst worden allebei een lege cel, en de geneste structuur keert niet terug, dus bewaar het oorspronkelijke JSON als je de structuur nodig hebt.
Excel, UTF-8 en de byte order mark
Een CSV-bestand is bytes, en de lezer moet de codering kennen. UTF-8 bevat geaccentueerde letters en andere alfabetten. Een byte order mark, drie bytes aan het begin van het bestand, markeert het bestand als UTF-8. Zonder die markering lezen sommige spreadsheetprogramma's het bestand in een lokale codepagina, en worden geaccentueerde letters rare tekens. Spreadsheets zetten 02134 bij het openen van een CSV ook vaak om in 2134.
De optie Voor Excel voegt de byte order mark alleen toe aan de gedownloade CSV, nooit aan de gekopieerde tekst, en alleen in de richting JSON → CSV. De lezer verwijdert een byte order mark uit de invoer, dus een bestand dat er al een heeft, wordt zonder fout omgezet.
Randgevallen
- Ongelijke rijen. Staat de kopregel aan, dan wordt een korte rij aangevuld met lege waarden, en houdt een langere rij zijn extra waarden als column_N. Het resultaat meldt hoeveel rijen afwijken van de kopregel.
- Herhaalde of lege kopteksten. Een herhaalde naam krijgt _2, _3 enzovoort, en een lege naam wordt column_N. Beide wijzigingen voorkomen dat twee sleutels elkaar overschrijven.
- Krullende aanhalingstekens. Slimme aanhalingstekens uit een tekstverwerker zijn geen CSV-aanhalingstekens, dus een veld zoals „Smith, Ann” splitst bij de komma. Maak ze eerst recht, met Geplakte tekst repareren of zoals beschreven in de gids over krullende aanhalingstekens.
- Regeleinden binnen aanhalingstekens. Een veld dat over twee regels loopt, is één record, maar Dubbele regels verwijderen splitst de invoer bij elk regeleinde, dus het zou de twee helften als aparte rijen behandelen. Zet om naar JSON en vergelijk de objecten, of controleer met de hand. De tool blijft nuttig voor lijsten met één waarde per regel.
- Grote bestanden. Het resultaatvak toont de eerste 100.000 tekens, maar Kopiëren en de download bevatten de volledige uitvoer.
- Ongeldige JSON. De converter meldt de regel en kolom van een fout, met een caret onder het teken. De JSON-opmaker legt de gangbare fouten uit, en de gids over JSON-fouten behandelt ze uitgebreider.
Losse spaties rond velden, lege rijen midden in een bestand en inconsequent gebruikte aanhalingstekens veroorzaken de meeste CSV-problemen, nog voordat het scheidingsteken een rol speelt. Maak de CSV eerst schoon en zet daarna om.
Vertaald uit de Engels origineel met hulp van AI.
Reacties
Nog geen reacties. Wees de eerste.


