Как правильно сохранить список словарей в JSON-файл?

У меня есть задача создания списка задач через консоль, где задачи представлены в виде словаря (с полями: Task ID, Task, Created_date, Updated_date, Task_status). Эти словари сохраняются в список. Как мне правильно записать этот список в формате JSON, чтобы сохранить его читаемость, похожую на таблицу? Или я усложняю себе задачу?
  • 13 февраля 2025 г. 14:04
Ответы на вопрос 2
Сохранение списка словарей в JSON-файл — это вполне стандартная задача, и делать это довольно просто в Python с модулем `json`. Чтобы сохранить список словарей в удобочитаемом формате, вы можете использовать параметр `indent` в функции `json.dump()` или `json.dumps()`. Это добавит отступы в JSON, что сделает его более читаемым.

Вот пример, как это можно сделать:

```python
import json
from datetime import datetime

# Пример списка словарей задач
tasks = [
    {
        "Task ID": 1,
        "Task": "Сделать домашку",
        "Created_date": datetime.now().isoformat(),
        "Updated_date": datetime.now().isoformat(),
        "Task_status": "В процессе"
    },
    {
        "Task ID": 2,
        "Task": "Подготовить отчет",
        "Created_date": datetime.now().isoformat(),
        "Updated_date": datetime.now().isoformat(),
        "Task_status": "Завершено"
    }
]

# Сохранение списка в JSON-файл
with open('tasks.json', 'w', encoding='utf-8') as f:
    json.dump(tasks, f, ensure_ascii=False, indent=4)

print("Список задач успешно сохранен в tasks.json")
```

### Что происходит в этом коде:

1. Импортируется модуль `json` для работы с JSON-форматом.
2. Создается список `tasks`, содержащий несколько словарей с задачами.
3. Функция `datetime.now().isoformat()` используется для получения текущей даты и времени в формате ISO, который легко сериализуется в JSON.
4. С помощью `with open(...)` открывается файл `tasks.json` для записи.
5. Функция `json.dump()` используется для записи списка в файл. Параметр `ensure_ascii=False` позволяет сохранить символы в их оригинальном виде (например, кириллицу). Параметр `indent=4` добавляет отступы и делает JSON более читаемым.

После выполнения этого кода вы получите файл `tasks.json`, который будет выглядеть примерно так:

```json
[
    {
        "Task ID": 1,
        "Task": "Сделать домашку",
        "Created_date": "2023-10-10T12:34:56.789123",
        "Updated_date": "2023-10-10T12:34:56.789123",
        "Task_status": "В процессе"
    },
    {
        "Task ID": 2,
        "Task": "Подготовить отчет",
        "Created_date": "2023-10-10T12:34:56.789123",
        "Updated_date": "2023-10-10T12:34:56.789123",
        "Task_status": "Завершено"
    }
]
```

Таким образом, ваш JSON-файл будет хорошо организован и легко читаем, что позволяет вам в дальнейшем работать с данными без особых сложностей.
JSON и нормальный вид не особенно совместимы. JSON машинночитаем, а нормальный вид нужен человеку. 
Ты, конечно, можешь извратиться, преобразовывать словари в JSON по отдельности, а потом сделать что-то типа
"[\n" + ",\n".join(jsoned_dicts) + "\n]"
Но всё равно на таблицу будет не очень похоже. Я бы не заморачивался ни с чем, что нелья решить с помощью параметра indent в json.dump().
Похожие вопросы