diff --git a/wizard-work/spark/json_key_counter.py b/wizard-work/spark/json_key_counter.py new file mode 100644 index 0000000..011df5d --- /dev/null +++ b/wizard-work/spark/json_key_counter.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +""" +JSON Key Counter Utility +Recursively counts all keys in a JSON file, including nested keys. +""" +import json +import sys +from pathlib import Path + + +def count_keys(obj, prefix=""): + """Recursively count all keys in a JSON structure.""" + count = 0 + if isinstance(obj, dict): + for key, value in obj.items(): + full_key = f"{prefix}.{key}" if prefix else key + count += 1 # Count this key + count += count_keys(value, full_key) # Recurse into value + elif isinstance(obj, list): + for i, item in enumerate(obj): + count += count_keys(item, f"{prefix}[{i}]") + return count + + +def main(): + if len(sys.argv) < 2: + print("Usage: json_key_counter.py ") + sys.exit(1) + + filepath = Path(sys.argv[1]) + + try: + content = filepath.read_text().strip() + if not content: + print(f"Error: Empty file {filepath}") + sys.exit(1) + + data = json.loads(content) + key_count = count_keys(data) + print(f"{filepath}: {key_count} keys") + except json.JSONDecodeError as e: + print(f"Invalid JSON in {filepath}: {e}") + sys.exit(1) + except FileNotFoundError: + print(f"File not found: {filepath}") + sys.exit(1) + + +if __name__ == "__main__": + main() \ No newline at end of file