XLSX naar NDJSON omzetten

Hier zet je XLSX naar NDJSON 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 NDJSON werkt anders dan XLSX. Het is dus niet het geleidelijke kwaliteitsverlies van een lossy codec: wat NDJSON 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 Alleen het eerste blad wordt gelezen, en daarvan alleen de waarden. Formules, opmaak, kolombreedtes en elk volgend blad blijven achter.

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

Waarom iets records één voor één per regel wil

Een JSON-array is één waarde. Om het laatste object erin te lezen moet je alles ervoor hebben geparst, wat betekent dat je het hele document in het geheugen houdt of naar een streamende parser grijpt. Voor een configuratiebestand doet dat er niet toe. Voor vier miljoen rijen is het het verschil tussen een werkende import en een proces dat het besturingssysteem afkapt.

Newline-delimited JSON haalt het probleem weg door de container weg te halen. Elke regel is een complete, onafhankelijke JSON-waarde, dus een consument leest een regel, doet er iets mee, gooit hem weg en gaat verder met een constant geheugengebruik.

Een regel is een record, gegarandeerd

De garantie geldt alleen als niets in de data zelf een nieuwe regel kan produceren, en deze omzetting handhaaft dat. Een cel met een regelafbreking — een adres over meerdere regels, een opmerking getypt met Alt+Enter — wordt geschreven met de afbreking geëscaped binnen de JSON-string, zodat het record op één regel blijft.

Dat is het concrete voordeel boven een met scheidingsteken gescheiden bestand. Een tab-gescheiden export van hetzelfde blad moet een lastige cel in aanhalingstekens wikkelen en hopen dat de lezer die conventie kent; hier is er niets om te implementeren.

De types die het spreadsheet kende, opgeschreven

Een met scheidingsteken gescheiden bestand heeft één type: tekst. Wat het leest moet gokken, en gokken is waar identificatienummers gehele getallen worden en versienummers decimalen. JSON draagt het onderscheid expliciet, dus een aantal wordt geschreven als 12, een vlag als true, een lege waarde als null.

Voor een laad naar een getypeerde bestemming is dat echte tijdwinst. Het schema dat je declareert en de waarden die je aanlevert stemmen overeen zonder tussenlaag, en een import die een rij weigert vertelt je welk veld niet klopte in plaats van een parsefout op een regelnummer te melden.

Wat de zelfbeschrijvende vorm kost

Elke regel herhaalt elke sleutel. Vijftigduizend rijen van zes kolommen betekent vijftigduizend kopieën van de zes veldnamen, wat op een echt blad zo’n 4,4 MB opleverde tegen 1,8 MB voor dezelfde data als tab-gescheiden tekst — ruwweg tweeënhalf keer zoveel.

Die ruil klopt meestal voor deze bestemming, omdat het bestand eenmalig door een machine wordt gelezen. Worden dezelfde records herhaaldelijk bevraagd, dan is een kolomgeoriënteerde vorm de betere keuze. In transit maakt de grootte meestal niet uit, want het bestand comprimeert uitstekend.

Het bestand verwerken zonder het te openen

De tools volgen uit de vorm. `wc -l` geeft je het exacte rijaantal, omdat er één record per regel is met een afsluitende nieuwe regel. `head -1` toont de veldnamen zoals ze echt zijn geschreven. `split -l 10000` levert brokken op die elk op zichzelf geldig zijn.

Voor meer dan dat leest jq een stroom waarden in plaats van één document, dus `jq -c "select(.aantal > 100)"` filtert een bestand groter dan het geheugen en geeft hetzelfde formaat terug dat het las.

Wat een bulkendpoint nog boven dit nodig heeft

Niet elke API die newline-delimited JSON zegt bedoelt alleen dat. Elasticsearch- en OpenSearch-bulkverzoeken plaatsen een instructieregel voor elk document, dus het lichaam heeft dubbel zoveel regels als er records zijn, en deze uitvoer is de ruwe grondstof eerder dan de payload.

Laadtools die het formaat zo aannemen bestaan ook en zijn het gewone geval: een warehouse-laadtaak gericht op newline-delimited JSON, een queue-producent die een regel per bericht leest, de eigen importroutine van een applicatie. Controleer de documentatie van de bestemming.

Het datumveld dat je laadtool zonder klagen accepteert

Datums in een spreadsheet zijn dagentellingen met een weergaveformaat eromheen, en de omzetting schrijft de waarde, niet het uiterlijk: 1 januari 2024 wordt 45292, en een tijdstempel wordt dat getal met een breuk voor de tijd. De telling begint eind december 1899.

Dit is het faalpatroon om op te letten bij dit paar specifiek, want JSON-getallen zijn legitiem en een laadtool met een numerieke kolom neemt 45292 zonder klachten aan. Converteer die velden bewust, als onderdeel van de pijplijn.

Nullen, hobbelige rijen en welk blad wordt gebruikt

Een lege cel wordt geschreven als null in plaats van weggelaten, zodat elk object dezelfde sleutels draagt. Introduceren latere rijen een veld dat eerdere rijen niet hadden, dan is de sleutelset de vereniging over het hele blad, zodat niets wordt weggelaten voor een laat verschijnend veld.

Alleen het eerste blad van de werkmap wordt omgezet, omdat een stroom records geen manier heeft om "en nu een andere tabel" uit te drukken. Staat het gewenste blad niet vooraan, herorden de werkmap dan en converteer opnieuw.

Waar de omzetting draait, en hoeveel tijd het kost

Alles gebeurt in je browser. De werkmap wordt gelezen en de regels lokaal geschreven, zonder upload en zonder wachtrij — bij een export van klantgegevens of iets onder een privacybeleid is dat het verschil tussen een tool die je op je werk kunt gebruiken en een die je niet kunt gebruiken.

Het plafond is 100 MB per werkmap en 100 bestanden in één keer. Ruim voor die grens is geheugen wat je zult voelen, want het blad wordt in een array gelezen voordat het wordt weggeschreven; tientallen megabytes is onopvallend, en een werkmap tegen het plafond laat een browsertabblad merkbaar zwaarder werken.

Wanneer een array of een kolomopslag beter is dan een stroom

Is de consument een programma dat het hele bestand leest en doorgeeft aan iets anders — een fixture, een seed-script, een verzoeklichaam — dan is een JSON-array de vorm die het verwacht, en voegt NDJSON alleen een assemblagestap toe. Converteer in dat geval naar JSON.

Worden de records herhaaldelijk bevraagd in plaats van eenmalig geladen, converteer dan naar Parquet: dezelfde rijen, een fractie van de bytes, en een query die twee velden raakt leest twee kolommen in plaats van elke regel.

Zo zet je XLSX naar NDJSON om

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

XLSX of NDJSON: wat er verandert

XLSX vergeleken met NDJSON
XLSXNDJSON
Volledige naamExcel-werkmapNewline-Delimited JSON
Bestandsextensie.xlsx.ndjson, .jsonl
Mediatypeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/x-ndjson
Voor het eerst gepubliceerd20072013
Uitgegeven doorMicrosoft
SpecificatieECMA-376
LicentieOpen standaardOpen standaard
Stand van zakenActueelActueel
Opent in een browserGeen browserGeen browser
In plaats daarvan overwogenCSV, ODS, ParquetJSON, CSV

Het resultaat openen

De gebruikelijke programma's overlappen niet: XLSX open je in Microsoft Excel, LibreOffice Calc en Google Sheets, NDJSON in jq en pandas — wie het resultaat krijgt, heeft dus iets uit de tweede rij nodig.

Waarvoor elk formaat bedoeld is

De twee mikken op ander werk: XLSX op bewerken, NDJSON op gegevens tussen programma’s verplaatsen en streamen. Dat is het afwegen waard, want de reden dat het ene bestaat is meestal de reden dat het andere onhandig is.

XLSX is het formaat van Microsoft, verschenen in 2007. Het is vastgelegd in ECMA-376, en dat is de moeite waard als het bestand het gereedschap moet overleven dat het schreef.

NDJSON stamt uit 2013. jq en pandas lezen het formaat.

Van XLSX naar NDJSON: veelgestelde vragen

Wordt mijn XLSX-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. De motor achter juist dit paar is SheetJS, een lezer en schrijver van spreadsheets in JavaScript; je browser haalt die één keer op en bewaart hem.

Is XLSX naar NDJSON 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. SheetJS wordt naar je eigen machine gehaald en draait daar, en daarom staat er geen teller op.

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

XLSX en NDJSON beschrijven de inhoud op fundamenteel andere manieren. De omzetting is daarom een reconstructie en geen kopie: getrouw, maar niet byte voor byte identiek. Alleen het eerste blad wordt gelezen, en daarvan alleen de waarden. Formules, opmaak, kolombreedtes en elk volgend blad blijven achter.

Moet ik iets installeren om een NDJSON-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 Newline-Delimited JSON normaal weergeeft.

Meer over deze formaten