Как валидировать и фильтровать JSON пользователей

Отдельно проверьте JSON, тип корня и схему каждого элемента. Фильтрация по active выполняется только после успешной валидации и не считается ошибкой.

Короткий ответ

Что ответить на собеседовании

Отдельно проверьте 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

Проверка @ намеренно упрощённая; пустой массив даёт ([], []).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее