Konvertér JSON, CSV, YAML, XML og SQL fra terminalen. Intet forlader din maskine.
Transmute er et lille command-line tool til udviklere, analytikere og alle andre, der får en datafil i det forkerte format. Peg på filen, sig hvad du vil have ud, og filtrér, sortér, join eller flatten undervejs, hvis du har brug for det.
- json
- csv
- yaml
- xml
- sql
- table
npm i -g @mahope/transmute
Andre måder at installere på
$ npx @mahope/transmute people.csv -o json
[
{
"name": "Alice",
"age": 32,
"city": "Aarhus"
},
{
"name": "Bob",
"age": 25,
"city": "Odense"
}
]
Prøv det her
Den samme motor som CLI'en, kørt i din browser. Ret i input eller pipeline, og outputtet opdateres, mens du skriver. Intet uploades.
Det samme i terminalen: transmute data.json --pipe '[{"op": "filter", "expr": "item.status === \"shipped\""},{"op": "pick", "fields": ["id", "customer", "total"]},{"op": "sort", "by": "total", "dir": "desc"}]' -o csv
Uden JavaScript viser feltet eksemplet, som det er kørt mod den aktuelle udgave; CLI'en giver samme output.
Skal du have hele CLI'en? Cheat sheet har alle operationer, flag og formatregler, og den fulde reference har det præcise output, exit codes og scripteksempler for hver af dem.
Tre ting, du rent faktisk ville bruge det til
Alle eksempler på siden er kørt mod den aktuelle udgave, før de blev sat ind. Outputtet er det, du får.
Lav et API-udtræk om til en CSV, der kan åbnes i et regneark
Behold de afsendte ordrer, behold tre kolonner, sortér efter beløb. Feltnavnene er dine egne; item er den aktuelle række.
$ transmute orders.json --pipe '[
{"op":"filter","expr":"item.status === \"shipped\""},
{"op":"pick","fields":["id","customer","total"]},
{"op":"sort","by":"total","dir":"desc"}
]' --output csv
id,customer,total
1039,Cara Vind,2199.99
1042,Alice Hansen,1299
Fyld en database fra en CSV
Tal forbliver tal, strenge bliver quoted og escaped, tomme celler bliver til NULL. Virker til Postgres, MySQL og SQLite.
$ transmute users.csv --output sql --table users
-- Generated by Transmute
INSERT INTO "users" ("id", "name", "email") VALUES
(1, 'Alice', '[email protected]'),
(2, 'O''Brien', '[email protected]');
Læs en XML-fil som JSON
Værdier fra XML kommer ind som strenge, så pak dem i Number(), når du filtrerer på dem.
$ transmute users.xml --pipe '[{"op":"filter","expr":"Number(item.age) > 26"},{"op":"pick","fields":["name"]}]' -o json
[
{
"name": "Alice"
}
]
Formater
- Læser
- JSON, CSV, YAML og XML. Formatet genkendes ud fra filendelsen eller indholdet; overstyr det med
--format. - Skriver
- JSON, CSV, YAML, XML, SQL
INSERT-statements eller en opstillet tabel i terminalen (standard). - Værd at vide
- CSV-værdier tolkes, som et regneark ville gøre det:
32bliver et tal,trueen boolean. YAML-parseren håndterer lister af flade records og simple key–value-dokumenter, ikke anchors eller flerlinjede strenge. Alt læses ind i hukommelsen, så det er bygget til filer op til nogle hundrede megabyte, ikke logfiler på flere gigabyte.
Pipeline-operationer
| Operation | Eksempel |
|---|---|
| filter | {"op":"filter","expr":"item.age > 18"} |
| map | {"op":"map","expr":"({...item, active: true})"} |
| pick / omit | {"op":"pick","fields":["name","email"]} |
| sort | {"op":"sort","by":"name","dir":"asc"} |
| unique | {"op":"unique","by":"email"} |
| group | {"op":"group","by":"city"} |
| add | {"op":"add","fields":{"total":"item.price * item.qty"}} |
| join | {"op":"join","on":"id","keep":"left","with":[…]} |
| rename | {"op":"rename","mapping":{"qty":"quantity"}} |
| flatten | {"op":"flatten","field":"items"} |
| head / tail / count | {"op":"head","n":5} |
Kæd trin sammen
En pipeline er et JSON-array af trin, der køres i rækkefølge. Udtryk er almindelig JavaScript med den aktuelle række som item. Her joines en kurv med lagertal fra et andet datasæt, hvorefter der filtreres og tælles:
$ transmute cart.json --pipe '[
{"op":"join","on":"sku","keep":"left","with":[{"sku":"A1","stock":42},{"sku":"B2","stock":0}]},
{"op":"filter","expr":"item.stock > 0"},
{"op":"count"}
]' --output json
[
{
"count": 1
}
]
Vil du joine mod en hel fil i stedet for inline-rækker, splejser du den ind fra shellen: --pipe "[{\"op\":\"join\",\"on\":\"sku\",\"with\":$(cat stock.json)}]". Join-guiden (engelsk) gennemgår det.
Installér CLI'en
Kræver Node.js 22 eller nyere. Ingen andre dependencies.
$ npm i -g @mahope/transmute
$ transmute --help
Eller kør den én gang uden at installere:
$ npx @mahope/transmute data.yaml -o json
Giv den en fil uden options, så får du en hurtig tabel-preview af indholdet. Pipe fra stdin med cat fil | transmute …. Kildekode og issues på GitHub.
Desktop-app
Samme engine med et vindue omkring: indsæt eller åbn en fil, byg pipelinen trin for trin, og se resultatet opdatere sig undervejs. Bygget med Tauri, så det er en lille native binary på hver platform. Det er et separat produkt, og kildekoden ligger ikke i dette repo — CLI'en og den engine, du installerer fra npm, bliver ved med at være MIT og uden begrænsninger.
Sådan får du appen, og hvad Pro tilføjer
Desktop-appen er gratis at hente og kører tre transformationer pr. start. Pro fjerner grænsen: et engangskøb på 19 USD, intet abonnement, til op til tre maskiner. Licensnøglen kommer på mail lige efter betalingen. CLI'en har ingen begrænsninger og er og bliver gratis under MIT-licensen.
Guides
Længere gennemgange af konkrete opgaver, hver med kommandoer du kan kopiere og det output, de giver. Guiderne er på engelsk.
- JSON to CSV with filtersClean spreadsheets from API data: pick columns, filter rows, sort, dedupe.
- CSV to SQL INSERT statementsSeed Postgres, MySQL or SQLite from a spreadsheet export.
- JSON to SQL INSERT statementsShape rows first, then generate statements with correct escaping and NULLs.
- Flatten nested JSON arraysOne row per array element, ready for CSV.
- Join two files by a shared keyA left join from the terminal, without Python or SQLite.
- Add computed fieldsTotals, tax and derived flags from existing columns.
- Filtering JSON without learning jqNamed steps instead of jq syntax, with format conversion built in.
- XML to JSONFrom the command line or in Python, with the caveats spelled out.
- JSON to XMLWell-formed XML from a JSON array, plus the Python equivalent.
- CSV to XMLSpreadsheet exports as XML, with filtering on the way.
Spørgsmål
Virker det offline?
Ja. Transformationer laver aldrig netværkskald. Den eneste undtagelse er, at desktop-appen kontakter licensserveren én gang, når du aktiverer eller deaktiverer en Pro-licens.
Hvor havner mine data?
Ingen steder. Filer læses fra disk eller stdin, transformeres i hukommelsen og skrives til stdout. Der er ingen telemetri, ingen konto og ingen server.
Hvad er licensen?
CLI'en og enginen er MIT-licenseret; kildekoden ligger på GitHub. Desktop-appen er gratis at hente med den begrænsning, der er beskrevet ovenfor; en Pro-licens er et engangskøb på 19 USD og gælder på op til tre maskiner.
Hvad er forskellen på CLI'en og desktop-appen?
De deler samme engine og giver samme output. CLI'en er til scripts, cron-jobs, CI og alle, der er hjemmevante i en terminal. Desktop-appen er til at bygge en pipeline interaktivt og se resultatet, mens du gør det. Skal du kun bruge én af dem, så start med CLI'en.
Hvordan quoter jeg pipelinen på Windows?
Ærligt talt: besværligt. I Git Bash eller WSL virker formen med enkelte anførselstegn fra denne side, som den er, og det er den anbefalede vej. I PowerShell kan du bruge stop-parsing-tokenet og skrive de indre anførselstegn som \": transmute --% orders.json --pipe "[{\"op\":\"filter\",\"expr\":\"item.status === 'shipped'\"}]" -o csv. Det knækker, så snart pipelinen indeholder < eller >, fordi cmd.exe læser dem som redirects, så sammenligninger kører du bedst fra Git Bash eller WSL.
Kan jeg bruge enginen fra min egen kode?
Ja. require('@mahope/transmute') giver dig run(text, inputFormat, pipeline, outputFormat) sammen med parsers, serializers og operations. Det er én fil uden dependencies.
Hvem står bag
Transmute er udviklet af Mads Holst Jensen, udvikler og teknisk partner i Odense. Han bygger og driver software for mindre virksomheder og deres teams, og værktøjet er vokset ud af det arbejde.
Fejl og ønsker meldes i GitHub issues. Alt andet, herunder samarbejde, går via mahoje.dk.