Извлечение целочисленного значения из JSON‑строки

Разберите строку через json.loads, извлеките value и проверьте, что это именно int, а не bool. Для примера результат — 42.

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

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

Разберите строку через json.loads, извлеките value и проверьте, что это именно int, а не bool. Для примера результат — 42.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать функцию get_value, которая принимает строку в формате JSON и возвращает содержащийся в ней целочисленный параметр.

def get_value(json_string):
    pass

# Тесты
import unittest

class GetValueTests(unittest.TestCase):
    def test_basic(self):
        self.assertEqual(get_value('{"value":42}'), 42)

if __name__ == '__main__':
    unittest.main()

Ответ

Разберите строку через json.loads, извлеките value и проверьте, что это именно int, а не bool. Для примера результат — 42.

import json

def get_value(json_string):
    data = json.loads(json_string)
    if not isinstance(data, dict) or 'value' not in data:
        raise ValueError('Ожидался объект с полем value')
    value = data['value']
    if type(value) is not int:
        raise ValueError('value должно быть целым числом')
    return value

Здесь выбран строгий контракт: неправильный JSON и отсутствующее либо неверно типизированное поле приводят к исключению. Проверка isinstance(value, int) приняла бы и True, поскольку bool — подкласс int. Добавьте проверки для отрицательных чисел, нуля, строки '42', дроби и отсутствующего поля.

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

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

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

Подробнее