Cookies voor statistiek en advertenties
We gebruiken cookies voor statistiek en voor advertenties, allebei naar Google. Weigeren verandert niets aan wat je te zien krijgt.Lees de privacypagina
Hier zet je XML 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.
Tot 100 bestanden tegelijk. Verschillende formaten door elkaar is prima.
Ze worden een voor een omgezet en samen in één ZIP gedownload.
XML naar NDJSON
Newline-delimited JSON heeft iets nodig om op te splitsen, en die splitsing gebeurt hier bij een lijst buitenaan de geparste data. XML parsen levert die nooit op: het resultaat is altijd een object met één sleutel, de naam van het root-element, met alles daaronder erin.
Dat geldt hoe groot het bestand ook is en hoeveel herhaalde elementen het bevat. Een export van 40 MB met tienduizend records wordt één regel van 40 MB. Niets gaat verloren en niets wordt gesplitst — was het jouw doel tienduizend regels, dan heeft deze omzetting dat niet gedaan.
De route die werkt is twee stappen: zet het bestand eerst om naar JSON, en gebruik dan jq om het pad met het herhaalde element te selecteren, te doorlopen en compact per regel weg te schrijven. Het is één commando, herhaalbaar in een script.
Geen converter kan die keuze zelf maken uit het document alleen. In een RSS-feed is het record het item-element; in een bankexport is het wat de leverancier een transactie noemt. Een tool die zou gokken zou vaak genoeg juist zijn om vertrouwd te worden en vaak genoeg fout om een lading te beschadigen.
Dit paar heeft wel degelijk een goed gebruik. Zijn de invoerbestanden veel kleine XML-documenten in plaats van één groot bestand — een map facturen, een reeks handleveranciersbestanden — dan is één regel per bestand precies de vorm die een lader wil.
Het werkt ook voor inventarisatie: elk configuratiebestand in een repository omzetten en de regels aan elkaar plakken levert een bevraagbare dataset op. In beide gevallen doet de omzetting zijn werk en is de ene regel het kenmerk, niet het probleem.
Ook na het splitsen volgt één XML-gedrag mee. Een herhaald element wordt alleen een array als het herhaalt: een record met één tag-element levert een string op, met twee een lijst van strings. Binnen één export hebben sommige regels de array en andere niet.
De oplossing hoort in de jq-stap: normaliseer elk veld dat kan herhalen naar een array bij het wegschrijven van elke regel, zodat de stream uniform is voordat er iets stroomafwaarts naar kijkt.
Compacte JSON zonder inspringing, sleutels in documentvolgorde, afgesloten met een newline. Attributen verschijnen als sleutels met een @ ervoor, en elementtekst op een tag met attributen komt onder een sleutel #text.
Een naamruimtevoorvoegsel blijft in de sleutelnaam staan, dus soap:Body is een sleutel met een dubbele punt erin, en een document met een XML-declaratie krijgt een extra sleutel ?xml. Beide zijn het waard om vóór een lading te verwijderen.
Waarden die er numeriek uitzien worden geparst, zowel in attributen als elementtekst. Handig voor een aantal, vervelend voor identificatoren: een ordernummer geschreven als 007 komt binnen als het getal 7, en een versieattribuut geschreven als 1.0 als 1.
Eén geval gaat goed: een geheel getal te lang om als JSON-getal te overleven, blijft een string in plaats van afgerond te worden. Wetenschappelijke notatie krijgt die bescherming niet — 1e3 komt binnen als 1000.
NDJSON wordt rechtstreeks gelezen door jq, door pandas met zijn lines-optie, en als laadformaat door de gangbare warehouse-laders. Elasticsearch bulk heeft een actieregel vóór elk document nodig, toe te voegen in dezelfde jq-stap die de records splitst.
Wat bij dit paar specifiek aandacht verdient is de regellengte. Een lezer die regel voor regel verwerkt, moet die hele regel in het geheugen houden — een hele-documentregel is dus een hele-documentbuffer.
Is de export groot, komt hij regelmatig binnen en moet hij telkens een stream worden, dan is het eerlijke advies geen browserconverter. Een streaming parser leest een XML-bestand element voor element zonder de hele boom in het geheugen te bouwen.
Dat overleeft ook bestanden groter dan het geheugen, wat niets op deze pagina doet — hier wordt het hele document eerst als JavaScript-objecten opgebouwd. Voor een eenmalig bestand is de converter sneller; voor een terugkerende pijplijn niet.
XML-commentaar wordt tijdens het parsen weggegooid en NDJSON heeft geen commentaarsyntax om het te ontvangen, dus documentatie in de export is verdwenen. Er is ook geen kopregel, geen schema en geen voorwoord: elke regel in een NDJSON-bestand is een record.
Moet de lading weten waar de data vandaan kwam, zet dat dan in een veld op het record of in de bestandsnaam. Het als eerste regel toevoegen maakt het bestand ongeldig voor zijn doel.
| XML | NDJSON | |
|---|---|---|
| Volledige naam | Extensible Markup Language | Newline-Delimited JSON |
| Bestandsextensie | .xml | .ndjson, .jsonl |
| Mediatype | application/xml | application/x-ndjson |
| Voor het eerst gepubliceerd | 1998 | 2013 |
| Uitgegeven door | W3C | — |
| Specificatie | XML 1.0 | — |
| Licentie | Open standaard | Open standaard |
| Stand van zaken | Actueel | Actueel |
| Opent in een browser | Elke browser | Geen browser |
| In plaats daarvan overwogen | JSON, YAML | JSON, CSV |
Opmerkingen gaan niet mee. In XML kun je een bestand van uitleg voorzien en NDJSON heeft daar geen syntaxis voor, dus elke toelichtende regel vervalt — en dat raakt juist de bestanden die van commentaar worden voorzien: configuratie die iemand anders moet bijhouden.
Geen enkele browser leest NDJSON. Daarmee is het het minst draagbare van de twee. Ga liever na of de ontvanger het aanneemt voor je het verstuurt.
De gebruikelijke programma's overlappen niet: XML open je in Visual Studio Code en oXygen XML Editor, NDJSON in jq en pandas — wie het resultaat krijgt, heeft dus iets uit de tweede rij nodig.
XML is het formaat van W3C, verschenen in 1998. Het is vastgelegd in XML 1.0, 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.
XML verscheen in 1998 en NDJSON in 2013. Het oudste is doorgaans het veiligste bestand om te overhandigen; het nieuwste doet hetzelfde werk met minder bytes.
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.
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.
XML 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. XML-attributen en tekstknopen worden allebei sleutels, en dat is een afweging die de omzetter voor je maakt.
Geen enkele browser leest NDJSON. Daarmee is het het minst draagbare van de twee. Ga liever na of de ontvanger het aanneemt voor je het verstuurt.
Opmerkingen gaan niet mee. In XML kun je een bestand van uitleg voorzien en NDJSON heeft daar geen syntaxis voor, dus elke toelichtende regel vervalt — en dat raakt juist de bestanden die van commentaar worden voorzien: configuratie die iemand anders moet bijhouden.