✅ Решения

⚡ Кратко

json.dumps возвращает строку, json.loads — словарь. Для записи в файл используйте json.dump. Одинарные кавычки в JSON вызывают ошибку.

Решение 1. Типы JSON

json.dumps(...) возвращает str.

json.loads(...) возвращает dict.

Решение 2. Найдите ошибку

Используется json.dumps (для строки) вместо json.dump (для файла).

import json
data = {"name": "Alice", "age": 25}
with open("user.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

Решение 3. JSONDecodeError

Возникнет json.JSONDecodeError, потому что JSON требует двойные кавычки.

Решение 4. Фильтрация низких оценок

# solution_04_grades.py
import json
from datetime import datetime
from pathlib import Path


def parse_date(date_str: str) -> datetime:
    return datetime.strptime(date_str, "%d-%m-%Y")


def filter_low_scores(threshold: int, start_date: str, end_date: str) -> None:
    start = parse_date(start_date)
    end = parse_date(end_date)

    grades = json.loads(Path("grades.json").read_text(encoding="utf-8"))

    filtered = [
        record for record in grades
        if record["grade"] < threshold
        and start <= parse_date(record["date"]) <= end
    ]

    Path("filtered_low_scores.json").write_text(
        json.dumps(filtered, ensure_ascii=False, indent=2),
        encoding="utf-8"
    )


if __name__ == "__main__":
    filter_low_scores(70, "01-01-2025", "31-03-2025")