Home
/api-save-data-to-json
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
from pathlib import Path
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
DATA_DIR = Path("temp/scraped_data/")
DATA_DIR.mkdir(exist_ok=True)
class Item(BaseModel):
left: str
right: str
class SaveRequest(BaseModel):
id: str
data: List[Item]
def get_next_filename() -> Path:
existing:list[int] = []
for f in DATA_DIR.glob("*.json"):
try:
existing.append(int(f.stem))
except ValueError:
pass
next_number = max(existing, default=0) + 1
return DATA_DIR / f"{next_number}.json"
import json
from collections import defaultdict
@app.post("/save")
async def save_data(req: SaveRequest):
filename = get_next_filename().with_suffix(".json")
result = {
"id": req.id
}
grouped = defaultdict(list)
for item in req.data:
grouped[item.left].append(item.right)
for key, values in grouped.items():
result[key] = values[0] if len(values) == 1 else values
with open(filename, "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
return {
"success": True,
"file": filename.name,
"data": result
}