Данный пример демонстрирует, как можно:
- Прочитать Excel-файл, содержащий ФИО и булевые значения (True/False).
- Получить на основании этой информации словарь соответствия (
{ФИО: True/False}). - Загрузить структуру данных из
data.json. - Рекурсивно обойти JSON и обновить поле
visibleдля тех записей, у которыхnameсовпадает со значениями из Excel. - Сохранить результат в новый JSON-файл.
├── data.json # Пример входного JSON
├── source.xlsx # Пример Excel-файла
├── README.md # Вы читаете этот файл
└── update_data.py # Скрипт Python
- Python 3.7+
- Установленные библиотеки:
pandasopenpyxl(если используете Excel-файлы в формате .xlsx)- Желательно иметь
pip install pandas openpyxl
В начале скрипта update_data.py находятся переменные, которые вы можете изменить под свой случай:
########################################
# Конфигурация (измените под себя)
########################################
EXCEL_FILE_PATH = 'source.xlsx' # Путь к Excel-файлу
EXCEL_SHEET_NAME = 'Sheet1' # Название листа Excel
EXCEL_COLUMN_FIO = 'ФИО' # Имя столбца с ФИО
EXCEL_COLUMN_VISIBLE = 'VisibleFlag' # Имя столбца с флагом (True/False)
JSON_SOURCE_PATH = 'data.json' # Путь к входному JSON
JSON_OUTPUT_PATH = 'data_updated.json' # Путь к результату
# Ключ, в котором хранится ФИО в JSON
JSON_NAME_KEY = 'name'
# Ключ, которое нужно обновить в JSON
JSON_VISIBLE_KEY = 'visible'
########################################Обратите внимание на:
- EXCEL_FILE_PATH – путь к Excel-файлу.
- EXCEL_SHEET_NAME – название листа (если у вас в книге несколько листов).
- EXCEL_COLUMN_FIO – название столбца, где указано ФИО.
- EXCEL_COLUMN_VISIBLE – название столбца, где указаны флаги (True/False).
- JSON_SOURCE_PATH – путь к исходному JSON.
- JSON_OUTPUT_PATH – путь, по которому сохранить результат.
- JSON_NAME_KEY – ключ, по которому в JSON хранится фамилия/ФИО.
- JSON_VISIBLE_KEY – ключ, который нужно обновить (чаще всего
visible).
В Excel-файле (в листе Sheet1) ожидается как минимум два столбца:
- ФИО – строка (например,
Иванов Иван Иванович). - VisibleFlag (или любое другое имя, заданное в
EXCEL_COLUMN_VISIBLE) – может быть:- Булевое значение True/False (в формате Excel);
- Текст
true/false/1/0/да/нети т. д. (конвертируются в True/False автоматически).
Пример:
| ФИО | VisibleFlag |
|---|---|
| Иванов Иван Иванович | True |
| Петров Пётр Петрович | false |
| Сидорова Анна Ивановна | да |
В data.json на некотором уровне вложенности (вполне могут быть массивы и объекты внутри) присутствуют поля name и visible. Пример:
{
"id": 1001,
"name": "Иванов Иван Иванович",
"visible": true,
"children": [
{
"id": 2001,
"name": "Сидорова Анна Ивановна",
"visible": false
},
{
"id": 2002,
"name": "Петров Пётр Петрович",
"visible": true
}
]
}Скрипт будет искать совпадения для поля name (или другого ключа, заданного в JSON_NAME_KEY) со значениями из вашего Excel.
- Убедитесь, что у вас установлен Python 3, а также модули
pandasиopenpyxl(для.xlsx):pip install pandas openpyxl
- Отредактируйте в
update_data.pyконфигурационные переменные под свои файлы и столбцы. - Запустите скрипт:
python update_data.py
- После выполнения в консоли появится сообщение вида:
Файл data.json успешно обновлён и сохранён в data_updated.json - Проверьте, что создан файл
data_updated.jsonс обновлёнными значениямиvisible.
- Чтение Excel – при помощи
pandas.read_excel()формируется DataFrame, из которого собирается словарь вида{ФИО: True/False}. - Загрузка JSON – в скрипте используется стандартный модуль
json, загружается содержимоеdata.json. - Рекурсивный обход – функция
update_visibility_in_data()проходит по всем уровням структуры JSON (словарям и спискам). Когда встречает ключname(определённый вJSON_NAME_KEY), проверяет, есть ли это значение в словареfio_to_visibility_map. Если есть – обновляет соответствующий ключvisible(определённый вJSON_VISIBLE_KEY) значением True или False из Excel. - Сохранение – результат рекурсивного обхода записывается в
data_updated.json.
- При необходимости можно изменить логику сопоставления имён (например, если в Excel хранятся только фамилии, а в JSON – полные ФИО).
- Можно расширять список строк, которые будут считаться
TrueилиFalse(например, добавитьon,off). - Если поля для обновления находятся под другими ключами или на разных уровнях вложенности, нужно скорректировать функцию
update_visibility_in_data().