Отдельно проверьте JSON, тип корня и схему каждого элемента. Фильтрация по active выполняется только после успешной валидации и не считается ошибкой.
Как валидировать и фильтровать JSON пользователей
Отдельно проверьте JSON, тип корня и схему каждого элемента. Фильтрация по active выполняется только после успешной валидации и не считается ошибкой.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Функция Python принимает JSON-массив. У каждого элемента обязательны id — int, не bool; email — строка с @; status — active, inactive или blocked. Верните валидных active и список ошибок с индексом. Валидные неактивные элементы пропускаются без ошибки.
Ответ
Отдельно проверьте JSON, тип корня и схему каждого элемента. Фильтрация по active выполняется только после успешной валидации и не считается ошибкой.
Пример:
import json
def process_api_response(raw_json):
try:
items = json.loads(raw_json)
except json.JSONDecodeError:
return [], ['Invalid JSON Format']
if not isinstance(items, list):
return [], ['Root: expected array']
result, errors = [], []
for index, item in enumerate(items):
if not isinstance(item, dict):
errors.append(f'{index}: expected object')
continue
invalid = []
if type(item.get('id')) is not int:
invalid.append('id')
if not isinstance(item.get('email'), str) or '@' not in item['email']:
invalid.append('email')
if item.get('status') not in ('active', 'inactive', 'blocked'):
invalid.append('status')
if invalid:
errors.append(f'{index}: invalid ' + ', '.join(invalid))
elif item['status'] == 'active':
result.append(item)
return result, errors
Проверка @ намеренно упрощённая; пустой массив даёт ([], []).