Transform JSON like a boss.
Filter it. Reshape it. Clean it. Remix it. All from your terminal.
"Why mutate your JSON by hand when you can morph it like a shapeshifter?"
json-morph is a command-line tool and API that helps you transform JSON data using simple, expressive flags.
- 🧠 Filter using logical expressions (
age > 18 && status == 'active') - 🔁 Map keys to new paths (
user.name→fullName) - ➕ Add static fields (
role:admin) - ❌ Remove sensitive fields (
password,secret) - 💅 Pretty-print or export to a new file
Perfect for quick one-liners, data munging, CLI pipelines, config transforms, and replacing brittle jq scripts for common tasks.
npm install -g json-morphjson-morph input.json [options]| Flag | Description |
|---|---|
| --map | Remap keys: "from.path:to.path" |
| --filter | Filter expression: "age > 18 && active == true" |
| --add | Add static fields: "key:value" |
| --remove | Remove fields: "password,token" |
| --preserve | Preserve all original fields (used with --map) |
| --output, -o | Output to a file |
| --pretty | Pretty-print output |
| --help | Show help |
| --version | Show version |
npx json-morph users.json \
--filter "age > 21 && active == true" \
--remove "password,internalNote" \
--output active-users.jsonnpx json-morph input.json \
--map "user.name:fullName" \
--map "user.id:userId" \
--preservenpx json-morph input.json \
--add "status:active" \
--add "score:100"npx json-morph data.json \
--filter "score >= 80" \
--map "user.email:contact.email" \
--add "passed:true" \
--remove "debugLog" \
--prettyYou can also use json-morph as a library:
import { transformJson } from 'json-morph';
const data = [{ name: 'Alice', age: 25 }];
const flags = {
filter: ['age > 18'],
map: ['name:fullName'],
add: ['status:active'],
};
const output = transformJson(data, flags);
console.log(output);- ✅ Lightweight, dependency-free
- ✅ Safer and easier than writing ad hoc scripts
- ✅ Works with deeply nested JSON
- ✅ Expressive filter logic without learning jq
- ✅ Scriptable, composable, and fun ✨
Built by cinfinit, a part-time JSON whisperer, full-time logic artisan, and lifelong member of the "why-is-this-API-like-this" club. Loves:
- Clean abstractions
- Messy data
- Terminal one-liners that look like sorcery When not mutating JSON structures, probably found arguing with a linter, renaming variables obsessively, or building another side project that absolutely no one asked for — but everyone secretly needed. “If it involves curly braces and chaos, I’m probably interested.”