NDJSON naar CSV omzetten

Hier zet je NDJSON naar CSV om, gratis en zonder account: sleep het bestand hierboven erin en binnen een paar seconden staat het resultaat klaar om te downloaden. De omzetting gebeurt binnen je eigen browser, dus het bestand wordt nooit geüpload. Het werkt hetzelfde op Windows, macOS en Linux als op iPhone en Android, en het blijft werken als je de verbinding verbreekt.

  • Waar het draait In je browser. Het bestand wordt nooit geüpload.
  • Opnieuw opgebouwd CSV werkt anders dan NDJSON. Het is dus niet het geleidelijke kwaliteitsverlies van een lossy codec: wat CSV kan uitdrukken wordt getrouw weergegeven, en wat daar geen equivalent heeft blijft helemaal weg.
  • Maximale grootte Tot 100 MB per bestand, gratis en zonder account.
  • Goed om te weten Geneste objecten worden platgeslagen tot kolommen. Diep geneste gegevens verliezen hun vorm.

Tot 100 bestanden tegelijk. Verschillende formaten door elkaar is prima.

Eén regel in, één rij uit, en het aantal is vooraf bekend

De rekensom is hier eenvoudiger dan bij elke andere bron op deze site. NDJSON garandeert één compleet record per regel, dus het aantal rijen dat je krijgt is het aantal regels in het bestand — wc -l op de opdrachtregel, of de regelteller in elke editor die het kan openen. Er kan niets in de data een regeleinde veroorzaken, want een nieuwe regel binnen een tekstwaarde wordt binnen de JSON ontsnapt.

Dat maakt de omzetting voorspelbaar op een manier die een JSON-array niet is. Heeft het bestand 412.000 regels, dan krijg je 412.000 rijen plus een kopregel. Lege regels worden overgeslagen, inclusief de afsluitende regel die bijna elke schrijver achterlaat.

Regels die niet overeenkomen maken de tabel breed

Elke regel in een NDJSON-bestand staat op zich, en niets verplicht de tweede regel de sleutels van de eerste te dragen. Een logstroom die meerdere gebeurtenistypen uitzendt — een verzoek, een fout, een voltooide taak — zet die allemaal in één bestand met elk andere velden.

De omzetting verzamelt elke sleutel die ergens in het bestand voorkomt en geeft elk een kolom, met lege cellen waar een regel niets had. Er gaat niets verloren, en het resultaat kan erg schaars zijn: veertig kolommen waarvan elke rij er acht gebruikt. Is dat je uitvoer, dan is filteren op één gebeurtenistype voor het omzetten nuttiger dan het spreadsheet verbreden.

Een kapotte regel stopt de omzetting en noemt zichzelf

Is een regel geen geldige JSON, dan gaat de omzetting daar niet voorbij. De melding zegt welke regel: dit bestand kon niet als NDJSON gelezen worden — regel 3 is geen geldige JSON. Dat is bewust en niet fragiel.

Een kapotte regel in een log betekent bijna nooit een verdwaald teken. Het betekent meestal een afgebroken schrijfactie — een proces dat halverwege gedood werd, een geroteerd bestand dat op een grens is afgesneden — en alles na dat punt is verdacht. Met het regelnummer in de hand is de staart repareren of verwijderen één opdracht.

Geneste logvelden worden kolommen met punten

Gestructureerd loggen nest meestal: een verzoekobject met een methode en een pad, een gebruikersobject met een id. Die worden platgeslagen tot kolommen genoemd naar het pad — request.method, user.id — met één kolom per bladwaarde.

Eén of twee niveaus geven een tabel waar iedereen mee kan werken, en dat dekt de meeste standaardinstellingen van logbibliotheken. Diepere structuren verbreden snel, en een logregel met een hele geserialiseerde payload geeft een kolom per veld erin. Het interessante deel van het bestand is dan meestal één subboom, en die eerst eruit halen geeft een veel betere tabel.

Arrays binnen een regel hebben geen goede kolom

Een record met een lijst — tags, foutframes, een set toegepaste regels — wordt platgeslagen tot genummerde kolommen: tags.0, tags.1, tags.2. Elke waarde blijft bewaard en de tabel krijgt een kolom voor de langste lijst in het bestand, de meeste leeg.

Voor analyse is dat zelden wat je wilt. Is de array bijzaak, dan geeft hem samenvoegen tot één tekst voor het omzetten één leesbare kolom. Is de array juist het onderwerp, dan wil je één rij per element, wat betekent dat het bestand eerst uitgevouwen moet worden.

Wat een CSV niet meeneemt uit de JSON-regels

Typen zijn het grootste verlies, en het gebeurt bij de bestemming, niet onderweg. De waarden worden trouw geschreven — een getal als cijfers, een boolean als true of false, een null als lege cel — maar CSV heeft geen typesysteem, dus wat het opent beslist wat alles is.

Excel beslist slecht en voorspelbaar: voorloopnullen verdwijnen uit identificatienummers, alles wat op een datum lijkt wordt een datum, en lange numerieke id’s verliezen hun laatste cijfers. Het middel is importeren in plaats van openen — Gegevens, dan Uit tekst/CSV, met identificatiekolommen ingesteld als tekst — of omzetten naar XLSX, waar typen expliciet in het bestand staan.

Aanhalingstekens, scheidingstekens en de waarden die ze nodig hebben

Waarden met een komma, een aanhalingsteken of een regeleinde worden tussen dubbele aanhalingstekens gezet met interne aanhalingstekens verdubbeld, de RFC 4180-conventie die elke degelijke importeerfunctie correct leest. Al het andere wordt kaal geschreven, zodat het bestand leesbaar blijft.

Logdata leunt daar zwaarder op dan de meeste bronnen. Useragents, verzoekpaden met querystrings, foutmeldingen en stacktraces zitten vol komma’s en aanhalingstekens. Is de bestemming een shellpijplijn in plaats van een spreadsheet, dan doet geen van die gereedschappen precies deze aanhalingstekens, en tab-gescheiden waarden omzeilt het probleem.

Hoe groot een logbestand dit aankan

Het inlezen is snel en de grens is geheugen, omdat het hele bestand in records wordt gelezen en alle kolommen worden bepaald voordat de eerste rij geschreven kan worden. De gratis laag accepteert tot 100 MB; tientallen megabytes gaat zonder problemen en bij honderden begint een tabblad te haperen.

Daarboven is het bronformaat in je voordeel. NDJSON splitst veilig op elke regelgrens — split -l 500000 geeft geldige bestanden — dus een zeer groot logbestand in stukken omzetten is een legitieme aanpak en geen noodoplossing.

Bewaar de NDJSON nadat je de CSV hebt

De CSV is een aanzicht, geen vervanging. Ze is de typen kwijt, heeft de structuur platgeslagen en records verzoend die nooit verplicht waren het eens te zijn, en niets daarvan is uit de tabel terug te halen.

Het oorspronkelijke bestand is ook beter in wat je hierna wilt: het groeit zonder herschrijven, filtert met jq zonder helemaal geladen te worden, en kan opnieuw omgezet worden met een andere subboom zodra de vraag verandert.

Het log verlaat je machine niet

De omzetting is gewone JavaScript in dit browsertabblad. Er gaat geen verzoek de deur uit dat het bestand draagt, er is geen account en geen daglimiet, en dat is te controleren door het netwerktabblad te openen en iets om te zetten.

Dat is voor dit paar geen bijzaak. Een productielog bevat IP-adressen, sessie-identificatoren, verzoekpaden, useragents en vaak genoeg een querystring met een token erin — precies de inhoud die een log naar een converter uploaden bij de meeste organisaties meldingsplichtig maakt.

Zo zet je NDJSON naar CSV om

  1. Sleep je NDJSON-bestand op deze pagina, of klik om er een te kiezen.
  2. Kies CSV als doel. De omzetting gebeurt in je browser en het bestand wordt niet geüpload.
  3. Download het klare CSV-bestand.

NDJSON of CSV: wat er verandert

NDJSON vergeleken met CSV
NDJSONCSV
Volledige naamNewline-Delimited JSONComma-Separated Values
Bestandsextensie.ndjson, .jsonl.csv
Mediatypeapplication/x-ndjsontext/csv
Voor het eerst gepubliceerd20131972
SpecificatieRFC 4180
LicentieOpen standaardOpen standaard
Stand van zakenActueelActueel
Opent in een browserGeen browserGeen browser
In plaats daarvan overwogenJSONXLSX, JSON, Parquet

Het resultaat openen

pandas leest zowel NDJSON als CSV, dus je kunt het resultaat naast het origineel leggen zonder een tweede programma.

Waarvoor elk formaat bedoeld is

CSV stamt uit 1972, vastgelegd in RFC 4180. Microsoft Excel, LibreOffice Calc en pandas lezen het formaat.

CSV verscheen in 1972 en NDJSON in 2013. Het oudste is doorgaans het veiligste bestand om te overhandigen; het nieuwste doet hetzelfde werk met minder bytes.

Van NDJSON naar CSV: veelgestelde vragen

Wordt mijn NDJSON-bestand ergens heen geüpload?

Nee. Deze omzetting gebeurt volledig in je browser, dus het bestand verlaat je apparaat niet. Je kunt het zelf nagaan: open het netwerktabblad van de ontwikkelaarshulpmiddelen en zet iets om. Je ziet de pagina zelf en de verzoeken voor statistiek en advertenties waarmee deze dienst betaald wordt, en geen enkel verzoek dat je bestand meeneemt.

Is NDJSON naar CSV omzetten gratis?

Ja. Geen account, geen watermerk en geen dagtegoed dat opraakt: het draait op je eigen machine, dus je mag zo vaak terugkomen als je wilt. De browser verwerkt bestanden tot 100 MB, 100 tegelijk.

Gaat er kwaliteit verloren bij het omzetten van NDJSON naar CSV?

NDJSON en CSV beschrijven de inhoud op fundamenteel andere manieren. De omzetting is daarom een reconstructie en geen kopie: getrouw, maar niet byte voor byte identiek. Geneste objecten worden platgeslagen tot kolommen. Diep geneste gegevens verliezen hun vorm.

Moet ik iets installeren om een CSV-bestand te openen?

Voor de omzetting niet: die gebeurt in de browser die je al open hebt staan. Om het resultaat te openen heb je daarna het programma nodig waarmee je apparaat Comma-Separated Values normaal weergeeft.

Meer over deze formaten