flaneur/tools/json_to_csv.py

51 lines
1.2 KiB
Python

#!/usr/bin/env python3
from __future__ import annotations
import argparse
import csv
import json
from pathlib import Path
FIELDS = [
"target",
"source",
"metric_name",
"metric_value",
"url",
"captured_at",
"status",
"confidence",
"notes",
"screenshot_path",
]
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Convert evidence.json to evidence.csv.")
parser.add_argument("--json", required=True, help="Path to evidence.json")
parser.add_argument("--csv", required=True, help="Path to output evidence.csv")
return parser.parse_args()
def main() -> int:
args = parse_args()
json_path = Path(args.json)
csv_path = Path(args.csv)
csv_path.parent.mkdir(parents=True, exist_ok=True)
payload = json.loads(json_path.read_text(encoding="utf-8"))
rows = payload.get("evidence", [])
with csv_path.open("w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=FIELDS, extrasaction="ignore")
writer.writeheader()
for row in rows:
writer.writerow({k: row.get(k) for k in FIELDS})
return 0
if __name__ == "__main__":
raise SystemExit(main())