XML naar NDJSON omzetten

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.

  • Waar het draait In je browser. Het bestand wordt nooit geüpload.
  • Opnieuw opgebouwd NDJSON werkt anders dan XML. 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 XML-attributen en tekstknopen worden allebei sleutels, en dat is een afweging die de omzetter voor je maakt.

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

Waarom een XML-document altijd precies één regel wordt

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.

Eén regel per record uit een XML-export halen

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.

De gevallen waarin één regel per bestand precies juist is

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.

Het vormprobleem dat een XML-record naar JSON volgt

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.

Wat er precies in de regel staat

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.

Types zoals ze uit een XML-parser komen

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.

Het resultaat laden, en de regellengte waar niemand op rekent

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.

Wanneer een streaming XML-parser het betere antwoord is

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.

Commentaar, en wat een regelgebaseerd bestand niet kan bevatten

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.

Zo zet je XML naar NDJSON om

  1. Sleep je XML-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.

XML of NDJSON: wat er verandert

XML vergeleken met NDJSON
XMLNDJSON
Volledige naamExtensible Markup LanguageNewline-Delimited JSON
Bestandsextensie.xml.ndjson, .jsonl
Mediatypeapplication/xmlapplication/x-ndjson
Voor het eerst gepubliceerd19982013
Uitgegeven doorW3C
SpecificatieXML 1.0
LicentieOpen standaardOpen standaard
Stand van zakenActueelActueel
Opent in een browserElke browserGeen browser
In plaats daarvan overwogenJSON, YAMLJSON, CSV

Wat verloren gaat

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.

Het resultaat openen

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.

Waarvoor elk formaat bedoeld is

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.

Van XML naar NDJSON: veelgestelde vragen

Wordt mijn XML-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 XML 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.

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

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.

Opent een NDJSON-bestand in de browser?

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.

Blijven opmerkingen behouden van XML naar NDJSON?

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.

Meer over deze formaten