Parquet naar JSON omzetten

Hier zet je Parquet naar JSON 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.
  • Zonder verlies Er gaat niets weg. JSON bewaart precies wat Parquet bewaarde.
  • Maximale grootte Tot 100 MB per bestand, gratis en zonder account.

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

Waarom een Parquet-extract ineens een JSON-bestand moet worden

Parquet is wat een dataplatform je meegeeft en JSON is wat al het andere opeet. Daar leeft deze omzetting: een fixture die naast de test in een repository moet staan, een seed voor een lokale mockdienst, een body om in een verzoek te plakken terwijl je uitzoekt waarom een endpoint het weigert, of vijftig rijen die je in een JSON-viewer wilt bekijken zonder DuckDB te installeren.

Let op dat de interessante gevallen allemaal klein zijn. Parquet bestaat om zeer grote tabellen goedkoop bevraagbaar te maken, en niets daarvan overleeft de oversteek — de kolomsgewijze indeling, de compressie, de statistieken waarmee een lezer hele rijgroepen kan overslaan. Wat je krijgt is een tekstdocument, en dat is het juiste artefact voor honderd rijen en het verkeerde voor tien miljoen.

Eén array, één object per rij, met inspringing van twee spaties

Het Parquet-bestand wordt teruggezet naar rijen, en die rijen worden geschreven als een JSON-array op het hoogste niveau met inspringing van twee spaties en een afsluitende nieuwe regel. Kolomnamen worden objectsleutels precies zoals het schema ze spelt, ook als het geen geldige JavaScript-identifier zou zijn.

Er is geen envelop en geen metadatablok. Verwacht de bestemming de rijen onder een naam — `{"rows": […]}` is de gewone vorm — voeg die dan zelf toe; `jq '{rows: .}'` doet het in één stap. De lengte van de array is het aantal rijen, dus het is ook de snelste controle dat het extract bevat wat je is verteld.

Een Parquet-lijst- of structkolom komt binnen als een tekst vol JSON

Dit is de verrassing op deze pagina en het is de moeite waard om twee keer te lezen. Parquet heeft echte geneste types — LIST, STRUCT en MAP — en de lezer hier geeft ze terug als JavaScript-objecten, die vervolgens naar tekst worden geserialiseerd en als tekst in het veld geplaatst. Een kolom `tags` met twee waarden wordt in de uitvoer geen `["a","b"]`. Het wordt `"[\"a\",\"b\"]"`, aangehaald, met de interne aanhalingstekens ontsnapt.

Er gaat niets verloren en alles zit één stap uit bereik. `jq '.[0].tags[0]'` geeft een fout terug over een tekst zonder indices; `jq '.[0].tags | fromjson | .[0]'` geeft de waarde. Gaat de JSON een testfixture in, dan is het eerlijk om die kolommen eenmalig uit te pakken met `jq 'map(.tags |= fromjson)'` en de gestructureerde versie te committen, in plaats van een dubbele codering achter te laten die de volgende lezer van de fixture zelf moet ontdekken.

Tijdstempels verlaten Parquet als ISO 8601-tekst

Een Parquet-tijdstempelkolom is een getypeerd geheel getal met een eenheid en een tijdzone-vlag vastgelegd in de footer. JSON heeft helemaal geen datumtype, dus elke waarde wordt geschreven als een ISO 8601-tekst — `2026-03-01T08:00:00.000Z` — wat ondubbelzinnig is, lexicografisch in de juiste volgorde sorteert, en wordt begrepen door `Date.parse`, `datetime.fromisoformat` en elke JSON-schemacontrole `format: date-time`.

Wat weg is, is de declaratie. Het bestand zegt niet meer dat de kolom een tijdstempel is; het zegt dat de kolom een tekst is die er toevallig zo uitziet. Alles verderop moet het opnieuw verteld worden — een `parse_dates`-argument, een schema, een cast. Voor een fixture is dat prima en expliciet. Voor een lading is het één plek extra om de tijdzone verkeerd te doen.

Identifiers boven 2^53 komen aangehaald aan in plaats van afgerond

Parquet heeft een 64-bit geheeltalletype en JavaScript-getallen dragen 53 bits gehele-getalprecisie. In plaats van stilzwijgend af te ronden, wordt een waarde die niet past geschreven als een aangehaalde tekst; eentje die wel past wordt geschreven als een kaal getal.

De afweging is bewust en zit om de juiste kant: een ordernummer dat een teruggeeft dat net verschoven is, is een bug die niemand vindt tot het ertoe doet, terwijl een kolom die soms een getal is en soms een tekst tenminste zichtbaar is. Het betekent wel dat een kolom halverwege het bestand van type kan wisselen, wat een strikt JSON-schema niet zal waarderen. Is dat je bestemming, cast dan de hele kolom naar tekst in de query die het extract produceerde, en de JSON wordt consistent.

Binaire kolommen worden hexadecimaal in de JSON

Een Parquet `BYTE_ARRAY` zonder UTF8-annotatie is bytes in plaats van tekst, en bytes hebben geen getrouwe representatie in JSON. Elke zo’n waarde wordt geschreven als een lowercase hex-tekst — twee tekens per byte, geen scheidingsteken, geen prefix.

Hex is omkeerbaar en duidelijk geen proza, wat de reden is om het te kiezen boven een poging tot decoderen. Het is ook twee keer zo groot als de bytes die het codeert en half zo groot als niets bruikbaars, dus is een binaire kolom groot en heb je hem niet nodig, laat hem dan vallen in de query in plaats van hem mee te slepen in de omzetting. Een hashkolom is prima; een ingebedde thumbnailkolom niet.

Null overleeft in de JSON, wat de tekstdoelen niet kunnen

Een ontbrekende waarde in Parquet wordt `null` in de JSON, te onderscheiden van een lege tekst en van een nul. Dat klinkt onopvallend tot je het vergelijkt met de gescheiden doelen, waar zowel null als leeg samenvallen tot niets tussen twee scheidingstekens en geen enkele query erna nog verschil kan maken.

Voor een fixture is dat verschil het hele punt. Een test die controleert op de afwezigheid van een waarde heeft de afwezigheid nodig als representeerbaar, en JSON is het enige tekstdoel hier dat het representeert. Het is ook waarom een rondweg via JSON meer van een Parquet-bestand bewaart dan een rondweg via CSV, ook al draagt geen van beide het schema.

Hoeveel groter de JSON is dan de Parquet

Aanzienlijk, en vanuit drie richtingen tegelijk. Parquet slaat elke kolom eenmaal op met zijn type gedeclareerd, dictionary-codeert dan herhaalde waarden en comprimeert de pagina’s; JSON herhaalt elke kolomnaam op elke rij, schrijft elk getal als decimale cijfers, en deze uitvoer laat elk veld op zijn eigen regel inspringen.

Reken op een orde van grootte in plaats van een percentage, en meer als de tabel breed is of de waarden zich sterk herhalen — een statuskolom van vijf verschillende teksten kost bijna niets in Parquet en zijn volle lengte op elke rij in JSON. Het hele document wordt ook in het geheugen als één tekenreeks opgebouwd voor het bewaard kan worden, wat het praktische plafond is, ruim voor de gratis grens van 100 MB. Neem een `LIMIT` op het extract in plaats van een warehousetabel om te zetten en te hopen.

Lees het Parquet-schema voor je op de JSON vertrouwt

De footer die het bestand zelfbeschrijvend maakte, komt niet mee. Kolomnamen overleven als sleutels en verder niets: niet de gedeclareerde types, niet de nullability, niet de compressie, niet de rijgroepstatistieken, niet de sleutel-waardemetadata die een producent er misschien in geschreven heeft.

Heb je DuckDB, dan drukt `DESCRIBE SELECT * FROM 'file.parquet'` het schema in één shellregel af en kost het tien seconden, en weten welke kolommen INT64 waren in plaats van DOUBLE verklaart het meeste wat vreemd oogt in de JSON. Heb je het niet, zet dan eerst een handvol rijen om en lees ze — de aangehaalde gehele getallen, de ISO-teksten en de ontsnapte geneste kolommen vertellen elk wat het brontype was.

Waar het Parquet-bestand wordt gedecodeerd

In dit tabblad. Een in gewoon JavaScript geschreven Parquet-lezer wordt de eerste keer dat je een van deze paren gebruikt opgehaald en doet daarna lokaal zijn werk; het bestand zelf wordt nergens naartoe gestuurd, en het netwerktabblad tijdens een omzetting toont de lezer die binnenkomt en niets dat vertrekt.

Dat onderscheid doet er bij dit formaat meer toe dan bij de meeste, want Parquet is een warehouseartefact. Bestanden met deze extensie zijn extracts uit productietabellen — klanten, orders, events, salarissen — en ze komen binnen via een dataleam die anders een upload zou moeten melden. Hier valt er niets te melden.

Zo zet je Parquet naar JSON om

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

Parquet of JSON: wat er verandert

Parquet vergeleken met JSON
ParquetJSON
Volledige naamApache ParquetJavaScript Object Notation
Bestandsextensie.parquet.json
Mediatypeapplication/vnd.apache.parquetapplication/json
CompressieZonder verlies — er gaat niets weg
Voor het eerst gepubliceerd20132001
Uitgegeven doorApache Software Foundation
SpecificatieRFC 8259
LicentieOpen standaardOpen standaard
Stand van zakenActueelActueel
Opent in een browserGeen browserElke browser
In plaats daarvan overwogenCSVXML, YAML, NDJSON

Wat behouden blijft

Er gaat niets verloren. Parquet en JSON bewaren hun inhoud verliesvrij: de omzetting wisselt de verpakking, niet de kwaliteit, en je kunt haar herhalen zonder dat schade zich opstapelt.

Wat het doelformaat erbij kan

JSON is een werkformaat en Parquet een af formaat. Wat terugkomt is bewerkbare tekst in plaats van een afbeelding van de pagina, meestal de reden voor de omzetting en tegelijk haar grens.

Het resultaat openen

JSON opent in elke actuele browser. Parquet komt nog minder ver. Gaat het bestand naar een webpagina of een formulier, dan is dat meestal de hele reden voor de omzetting.

De gebruikelijke programma's overlappen niet: Parquet open je in pandas, Apache Spark en DuckDB, JSON in Visual Studio Code, jq en Postman — wie het resultaat krijgt, heeft dus iets uit de tweede rij nodig.

Waarvoor elk formaat bedoeld is

JSON stamt uit 2001, vastgelegd in RFC 8259. Visual Studio Code, jq en Postman lezen het formaat.

Van Parquet naar JSON: veelgestelde vragen

Wordt mijn Parquet-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 parquet-wasm, een WebAssembly-versie van de Apache Arrow-lezer; je browser haalt die één keer op en bewaart hem.

Is Parquet naar JSON 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. parquet-wasm wordt naar je eigen machine gehaald en draait daar, en daarom staat er geen teller op.

Gaat er kwaliteit verloren bij het omzetten van Parquet naar JSON?

Nee. JSON bewaart dezelfde inhoud zonder iets weg te gooien: het resultaat is in kwaliteit identiek aan het origineel.

Is Parquet naar JSON verliesvrij?

Er gaat niets verloren. Parquet en JSON bewaren hun inhoud verliesvrij: de omzetting wisselt de verpakking, niet de kwaliteit, en je kunt haar herhalen zonder dat schade zich opstapelt.

Is het JSON-bestand daarna bewerkbaar?

JSON is een werkformaat en Parquet een af formaat. Wat terugkomt is bewerkbare tekst in plaats van een afbeelding van de pagina, meestal de reden voor de omzetting en tegelijk haar grens.

Meer over deze formaten