Разберите строку через json.loads, извлеките value и проверьте, что это именно int, а не bool. Для примера результат — 42.
Извлечение целочисленного значения из JSON‑строки
Разберите строку через 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', дроби и отсутствующего поля.