Метод model_validate_json
Метод model_validate_json применяется к классу модели
и превращает JSON-строку в готовый объект Pydantic.
Первым параметром передаётся строка с JSON-данными.
Метод проверяет типы полей, обязательность значений и
пользовательские правила валидации.
Если данные не соответствуют модели, выбрасывается исключение
ValidationError.
Синтаксис
Model.model_validate_json(json_string)
Пример
Давайте создадим модель User и получим объект из JSON-строки:
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
res = User.model_validate_json('{"name": "abcde", "age": 25}')
print(res)
print(type(res))
Результат выполнения кода:
name='abcde' age=25
<class '__main__.User'>
Пример
Давайте передадим JSON с неверным типом поля и посмотрим на ошибку:
from pydantic import BaseModel, ValidationError
class User(BaseModel):
name: str
age: int
try:
res = User.model_validate_json('{"name": "abcde", "age": "hello"}')
except ValidationError as e:
print(e)
Результат выполнения кода:
1 validation error for User
age
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='hello', input_type=str]
Пример
Давайте используем метод внутри обработчика FastAPI, когда JSON приходит как строка, а не как тело запроса:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.post('/user/')
def create_user(raw: str):
user = User.model_validate_json(raw)
return {'name': user.name, 'age': user.age}
Результат выполнения кода для строки
'{"name": "abcde", "age": 25}':
{"name": "abcde", "age": 25}
Смотрите также
-
метод
model_validate,
который проверяет словарь и создаёт экземпляр модели -
метод
model_dump,
который превращает модель в словарь -
метод
model_dump_json,
который превращает модель в JSON-строку -
класс
BaseModel,
который является основой для всех моделей Pydantic