jt - JSONata Query Tool
jt is a powerful command-line tool for querying and transforming JSON data using JSONata, a lightweight query and transformation language for JSON.
Features
- 🔍 Query JSON, YAML, and JSON Lines data using JSONata expressions
- 📝 Multiple output formats: Pretty JSON, Compact JSON, JSON Lines, YAML, and CSV
- 🚀 Fast and efficient processing with streaming support
- đź’ˇ User-friendly error messages with helpful suggestions
- đź“– Support for both stdin and file input
- 🎯 TypeScript implementation with full type safety
Installation
Using npm
npm install -g @2017takeda/jt-cli
Using Homebrew (coming soon)
brew install jt
Usage
Basic Usage
jt '<jsonata-expression>' input.json
cat data.json | jt '<jsonata-expression>'
jt -i yaml '<jsonata-expression>' data.yaml
Examples
Basic Query
echo '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]' | jt '$.name'
Filtering
echo '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]' | jt '$[age > 25]'
Transformation
echo '{"users": [{"first": "John", "last": "Doe"}]}' | jt 'users.{"fullName": first & " " & last}'
Aggregation
echo '[{"value": 10}, {"value": 20}, {"value": 30}]' | jt '$sum(value)'
Input Formats
jt supports multiple input formats:
- JSON (default): Standard JSON format
- YAML: YAML format (
-i yaml or --input yaml)
- JSON Lines: Newline-delimited JSON (
-i jsonl or --input jsonl)
jt -i yaml '$.users.name' config.yaml
jt -i jsonl '$.event' events.jsonl
Output Formats
Control output formatting with the -o or --output option:
- pretty (default): Formatted JSON with indentation
- compact: Minified JSON
- jsonl: JSON Lines (one JSON per line)
- yaml: YAML format
- csv: CSV format (for tabular data)
jt -o compact '$.users' data.json
jt -o yaml '$.config' settings.json
jt -o csv '$' users.json
Advanced Features
Using JSONata Functions
echo '{"name": "john doe"}' | jt '{"name": $uppercase(name)}'
echo '{"date": "2023-12-01"}' | jt '{"year": $substring(date, 0, 4)}'
Complex Queries
echo '[{"dept": "sales", "salary": 50000}, {"dept": "sales", "salary": 60000}]' | \
jt 'dept{dept: $sum(salary)}'
JSONata Expression Language
JSONata is a powerful query language designed specifically for JSON. Key features include:
- Path expressions:
$.users[0].name
- Filtering:
$.users[age > 21]
- Mapping:
$.users.{"fullName": firstName & " " & lastName}
- Aggregation:
$sum($.items.price)
- Functions:
$uppercase(), $substring(), $now(), etc.
For complete JSONata documentation, visit jsonata.org.
Error Handling
jt provides clear, actionable error messages:
echo '{invalid}' | jt '$'
echo '{}' | jt '$undefined('
Development
Prerequisites
- Node.js 20 or higher (Node.js 24 recommended)
- npm or yarn
- nvm (recommended for managing Node.js versions)
Setup
git clone https://github.com/TAKEDA-Takashi/jt-cli.git
cd jt-cli
nvm use
npm install
npm test
npm run build
Testing
This project follows Test-Driven Development (TDD) practices:
npm test
npm run test:watch
npm run test:coverage
Contributing
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature)
- Write tests for your changes
- Implement your changes
- Ensure all tests pass
- Commit your changes (
git commit -m 'feat: add amazing feature')
- Push to the branch (
git push origin feature/amazing-feature)
- Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
Support