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.
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"
}
]
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 18 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.
Download til macOS, Windows eller Linux
Desktop-appen bliver et engangskøb på 19 USD, intet abonnement. Betaling er ikke koblet på endnu, så indtil videre er den gratis at hente; den nuværende udgave tillader tre transformationer pr. start, indtil der indtastes en licens. 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 til CSV med filtreRene regneark fra API-data: vælg kolonner, filtrér rækker, sortér, fjern dubletter.
- CSV til SQL INSERT-statementsFyld Postgres, MySQL eller SQLite fra et regnearks-udtræk.
- JSON til SQL INSERT-statementsForm rækkerne først, generér derefter statements med korrekt escaping og NULL.
- Flatten nested JSON-arraysÉn række pr. array-element, klar til CSV.
- Join to filer på en fælles nøgleEt left join fra terminalen, uden Python eller SQLite.
- Tilføj beregnede felterTotaler, moms og afledte flag fra eksisterende kolonner.
- Filtrér JSON uden at lære jqNavngivne trin i stedet for jq-syntaks, med formatkonvertering indbygget.
- XML til JSONFra kommandolinjen eller i Python, med forbeholdene skrevet ud.
- JSON til XMLVelformet XML fra et JSON-array, plus Python-modstykket.
- CSV til XMLRegnearks-udtræk som XML, med filtrering undervejs.
Spørgsmål
Virker det offline?
Ja. Hverken CLI'en eller desktop-appen laver netværkskald. Når den er installeret, kan du trække stikket.
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 et betalt produkt (19 USD engangs), når betalingen er sat op. Indtil da er den gratis at hente med den begrænsning, der er beskrevet ovenfor.
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.