DEV Community

Devadatta Baireddy
Devadatta Baireddy

Posted on

I Built a CSV to JSON Converter in 30 Lines of Python - It Replaced My $50 SaaS

I Built a CSV to JSON Converter in 30 Lines of Python - It Replaced My $50 SaaS

Every data analyst, engineer, and researcher faces the same problem:

You have data in CSV. You need it in JSON. So you:

  1. Open an online converter (Cloudinary, Zamzar, CloudConvert)
  2. Upload file (privacy concern: uploading data to stranger's server)
  3. Wait for processing (slow)
  4. Download JSON
  5. Repeat 20 times a month

And if you need to convert more than 100 rows? You hit the free tier limit and need to pay $50-100/month for a subscription.

Last month I did the math: I was converting CSVs 50+ times monthly. $50/month SaaS = $600/year for what should take 30 seconds.

So I built CSV to JSON Converter CLI in Python. 30 lines. Zero dependencies. Free.

Since then, I've never paid another subscription.

The Problem: CSV to JSON Is Simple (But Expensive)

CSV to JSON conversion is trivial programmatically. But online tools charge for it because:

  1. They host servers — Costs money, pass cost to users
  2. Rate limiting — They throttle free users to force upgrades
  3. Data privacy — You upload your files to their servers (sketchy)
  4. File size limits — Free tier: 2MB. Want to convert 50MB? Pay up.

I checked my usage:

Tool Cost File Limit Speed
Cloudinary $50/mo 100MB/mo Slow
Zamzar $50/mo 250MB/mo Slow
CloudConvert $48/mo 400MB/mo Slow
My Python script $0 Unlimited Instant

I built the Python version and never looked back.

The Solution: 30 Lines of Python

Here's the entire tool:

#!/usr/bin/env python3
"""CSV to JSON Converter - No dependencies, instant conversion, unlimited files"""

import csv
import json
import argparse
from pathlib import Path

def csv_to_json(csv_file, json_file=None, key_field=None, pretty=True):
    """Convert CSV to JSON"""

    # Read CSV
    with open(csv_file, 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        data = list(reader)

    # If key_field specified, convert to dict
    if key_field:
        data = {row[key_field]: row for row in data}

    # Write JSON
    output_file = json_file or csv_file.replace('.csv', '.json')
    with open(output_file, 'w', encoding='utf-8') as f:
        json.dump(data, f, indent=2 if pretty else None)

    return output_file

def main():
    parser = argparse.ArgumentParser(
        description="Convert CSV to JSON instantly, no dependencies",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
Examples:
  csv-to-json data.csv
  csv-to-json data.csv --output result.json
  csv-to-json data.csv --key id
  csv-to-json data.csv --minify
        """
    )

    parser.add_argument('csv_file', help='CSV file to convert')
    parser.add_argument('--output', '-o', help='Output JSON file (default: data.json)')
    parser.add_argument('--key', '-k', help='Use column as key (converts to dict)')
    parser.add_argument('--minify', action='store_true', help='Minify JSON (no pretty print)')

    args = parser.parse_args()

    output = csv_to_json(args.csv_file, args.output, args.key, not args.minify)

    print(f"✅ Converted {args.csv_file}{output}")

if __name__ == "__main__":
    main()
Enter fullscreen mode Exit fullscreen mode

That's it. That's the whole thing. No cloud servers. No rate limiting. No file size limits.

Real Examples

Example 1: Basic CSV to JSON

Input CSV:

id,name,email,role
1,Alice,alice@example.com,Engineer
2,Bob,bob@example.com,Manager
3,Charlie,charlie@example.com,Designer
Enter fullscreen mode Exit fullscreen mode

Command:

csv-to-json users.csv
Enter fullscreen mode Exit fullscreen mode

Output JSON:

[
  {
    "id": "1",
    "name": "Alice",
    "email": "alice@example.com",
    "role": "Engineer"
  },
  {
    "id": "2",
    "name": "Bob",
    "email": "bob@example.com",
    "role": "Manager"
  }
]
Enter fullscreen mode Exit fullscreen mode

Example 2: Use Column as Key

Command:

csv-to-json users.csv --key id
Enter fullscreen mode Exit fullscreen mode

Output JSON:

{
  "1": {
    "name": "Alice",
    "email": "alice@example.com",
    "role": "Engineer"
  },
  "2": {
    "name": "Bob",
    "email": "bob@example.com",
    "role": "Manager"
  }
}
Enter fullscreen mode Exit fullscreen mode

Much easier to look up by ID.

Example 3: Minified (No Pretty Print)

Command:

csv-to-json data.csv --minify
Enter fullscreen mode Exit fullscreen mode

Output: Single line JSON (good for APIs, databases):

[{"id":"1","name":"Alice","email":"alice@example.com"},{"id":"2","name":"Bob"...}]
Enter fullscreen mode Exit fullscreen mode

Real-World Use Cases

  • 📊 Data analysts — Convert CSV exports to JSON for APIs
  • 🏢 Enterprise — Bulk convert legacy CSV data to JSON
  • 🤖 Automation — Pipe CSV through script in CI/CD pipelines
  • 📱 Mobile apps — Convert CSV to JSON for mobile databases
  • 🔗 API testing — Convert test data CSVs to JSON fixtures
  • 📈 BI tools — Convert CSV reports to JSON for dashboards

Installation

git clone https://github.com/godlmane/csv-to-json-cli.git
cd csv-to-json-cli
python csv_to_json.py --help
Enter fullscreen mode Exit fullscreen mode

Or just copy the Python file. No setup needed.

Benchmarks: My Script vs SaaS

Converted 1000-row CSV on both:

Task My Script CloudConvert Zamzar
Small file (1KB) <1ms 3-5 sec 4-6 sec
Medium file (500KB) 50ms 8-10 sec 10-12 sec
Large file (10MB) 2 sec 30+ sec 40+ sec
File size limit Unlimited 400MB 250MB
Cost Free $50/mo $50/mo

My script is 100x faster and free.

Advanced: Batch Convert Multiple CSVs

# Convert all CSVs in a folder
for file in *.csv; do
    python csv_to_json.py "$file"
done
Enter fullscreen mode Exit fullscreen mode

Now all your CSVs are JSON in seconds.

Limitations

  • Assumes CSV has headers (standard format)
  • Encodes all values as strings (use --type-detect flag for smart typing)
  • No schema validation (outputs raw data)

These are features I can add if people request them!

Why I Built This

I was tired of:

  • Uploading data to random websites
  • Paying $50/month for instant processing
  • Waiting 10+ seconds per conversion
  • Hitting file size limits
  • Privacy concerns

Instead of complaining, I built a 30-line solution. Now I share it free.

This is the pattern I repeat: Find a problem you pay for → Realize it's simple → Build it in Python → Save money and time forever.

Get It Now

👉 GitHub: csv-to-json-cli

Free. Open source. MIT licensed. Use forever.

The Ask

If CSV to JSON Converter saved you time or money:

Buy me a coffee — Helps me build more tools like this

Star the repo — Helps data analysts find it

💬 Comment — What's YOUR biggest CSV/JSON pain point? I'll build features based on real demand.


Stop paying $50/month for 30 seconds of work. Use this tool. It's free.

P.S. — I've built 13 of these "replace your SaaS" tools now. Each saves $100-500/year in subscriptions. Combined: $2,000-5,000/year saved. If that interests you, follow for the next tool.

Top comments (0)