How to Parse Data in Python: A Beginner's Helper

This helper parses a JSON payload, extracts user names, emails, and signup dates, then summarizes the results.

Easy Python 3.9+ Aug 9, 2026 Data pipelines & processing 15 views 0 copies

Python code

42 lines
Python 3.9+
import json
from datetime import datetime
from typing import Dict, List


def parse_data(payload: str) -> Dict[str, List]:
    """Parse a JSON payload and extract useful fields."""
    raw = json.loads(payload)
    users = raw.get("users", [])

    parsed = {
        "names": [],
        "emails": [],
        "signup_dates": [],
    }

    for user in users:
        parsed["names"].append(user.get("name", "unknown"))
        parsed["emails"].append(user.get("email", "no-email"))
        date_str = user.get("signup_date", "1970-01-01")
        parsed["signup_dates"].append(datetime.fromisoformat(date_str))

    return parsed


def summarize_parsed(data: Dict[str, List]) -> str:
    """Generate a short summary of the parsed results."""
    count = len(data["names"])
    newest = max(data["signup_dates"]).date().isoformat()
    return f"Parsed {count} users; newest signup on {newest}."


if __name__ == "__main__":
    sample_payload = json.dumps({
        "users": [
            {"name": "Ana", "email": "ana@example.com", "signup_date": "2023-05-01"},
            {"name": "Bob", "email": "bob@example.com", "signup_date": "2024-02-14"},
        ]
    })

    result = parse_data(sample_payload)
    print(summarize_parsed(result))

Output

stdout
Parsed 2 users; newest signup on 2024-02-14.

How it works

The parse_data function uses json.loads to convert the JSON string into a Python dictionary. It safely accesses nested fields with .get() to avoid KeyError. datetime.fromisoformat converts date strings to datetime objects for easy comparison. The summarize_parsed function then counts entries and finds the newest date using max. This modular approach separates parsing from summarizing for clarity.

Common mistakes

  • Using `json.load` instead of `json.loads` when working with strings
  • Assuming all users have all fields without using `.get()` defaults
  • Forgetting to convert date strings to datetime objects before comparing

Variations

  1. Use `pandas` with `pd.json_normalize` for more complex nested payloads
  2. Add error handling with `try/except json.JSONDecodeError` for malformed input

Real-world use cases

  • Parsing user registration events from an API webhook for analytics.
  • Extracting user data from exported JSON files for database migration.
  • Reading SaaS platform audit logs to generate compliance reports.

Sponsored

Run this sample

Open the browser IDE to tweak the example and see results without installing anything.

Open editor

More from Data pipelines & processing

Related tutorials and quizzes for this topic.