JSONIFY
Описание
jsonify — это Rapidy
-кодировщик, используется для преобразования сложных python-объектов
к более простым python-объектам или строке.
jsonify
сильно упрощает процесс сохранения и отправки сложных данных.
from datetime import datetime
from decimal import Decimal
from pydantic import BaseModel, Field
from rapidy.encoders import jsonify
class InnerData(BaseModel):
text: str = 'text'
class ComplexData(BaseModel):
decimal: Decimal = Decimal('1.22223311')
date: datetime = datetime.now()
inner: InnerData = Field(default_factory=InnerData)
jsonify('text') # 'text'
jsonify('text', dumps=True) # '"text"'
jsonify(Decimal("1.22223311")) # '1.22223311'
jsonify(ComplexData()) # {'decimal': '1.22223311', 'date': '2024-10-30T10:51:07.884276', 'inner': {'text': 'text'}}
jsonify(ComplexData(), dumps=True) # '{"decimal": "1.22223311", "date": "2024-10-30T10:51:07.884276", "inner": {"text": "text"}}'
jsonify позволяет преобразовывать любой объект python
в строку или более простой объект, который может быть
преобразован в формат json
.
Вы можете использовать jsonify
, чтобы подготовить данные для сохранения в базу данных (например, для MongoDB
/Redis
или как поле JSON
/JSONB
в Postgres
).
Rapidy
также использует jsonify
внутри себя при подготовке серверных ответов.
Decimal
всегда преобразуется в строку.
Атрибуты jsonify
obj
obj: Any
— объект для преобразования (может быть практически чем угодно).
include
include: set[str] | dict[str, Any] | None = None
— параметр Pydantic include
, передаваемый моделям Pydantic
для указания полей, которые нужно включить.
from pydantic import BaseModel, Field
from rapidy.encoders import jsonify
class Result(BaseModel):
value: str = Field('data', alias='someValue')
another_value: str = Field('another_data', alias='someAnotherValue')
jsonify(
Result(),
include={'value'},
)
# {'someValue': 'data'}
exclude
exclude: set[str] | dict[str, Any] | None = None
— параметр Pydantic exclude
, передаваемый моделям Pydantic
для указания полей, которые нужно исключить.
from pydantic import BaseModel, Field
from rapidy.encoders import jsonify
class Result(BaseModel):
value: str = Field('data', alias='someValue')
another_value: str = Field('another_data', alias='someAnotherValue')
jsonify(
Result(),
exclude={'value'},
)
# {'someAnotherValue': 'another_data'}
by_alias
by_alias: bool = True
— параметр Pydantic by_alias
, передаваемый моделям Pydantic, чтобы определить, использовать ли при
выводе имена псевдонимов (если они предоставлены) или имена атрибутов Python.
from pydantic import BaseModel, Field
from rapidy.encoders import jsonify
class Result(BaseModel):
value: str = Field('data', alias='someValue')
jsonify(
Result(),
by_alias=True, # <-- default
)
# {"someValue": "data"}
...
jsonify(
Result(),
by_alias=False,
)
# {"value": "data"}
exclude_unset
exclude_unset: bool = False
— параметр Pydantic exclude_unset
, передаваемый моделям Pydantic для определения,
должен ли он исключать из вывода поля, которые не были явно заданы (и имели только значения по умолчанию).
from pydantic import BaseModel, Field
from rapidy.encoders import jsonify
class Result(BaseModel):
value: str = Field('data', alias='someValue')
another_value: str = Field('another_data', alias='someAnotherValue')
jsonify(
Result(someAnotherValue='new_data'),
exclude_unset=False, # <-- default
)
# {"someValue": "data", "someAnotherValue": "new_data"}
...
jsonify(
Result(someAnotherValue='new_data'),
exclude_unset=True,
)
# {"someAnotherValue": "new_data"}
exclude_defaults
exclude_defaults: bool = False
— параметр Pydantic exclude_defaults
, передаваемый моделям Pydantic, чтобы
определить, нужно ли исключать из вывода поля, которые имеют одинаковое значение по умолчанию, даже если
они были заданы явно.
from pydantic import BaseModel, Field
from rapidy.encoders import jsonify
class Result(BaseModel):
value: str = Field('data', alias='someValue')
jsonify(
Result(),
response_exclude_defaults=True,
)
# {}
exclude_none
exclude_none: bool = False
— параметр Pydantic exclude_none
, передаваемый моделям Pydantic для определения,
нужно ли исключать из вывода поля, имеющие значение None
.
from pydantic import BaseModel, Field
from rapidy.encoders import jsonify
class Result(BaseModel):
value: str = Field('data', alias='someValue')
none_value: None = None
jsonify(
Result(),
exclude_none=True,
)
# {"someValue": "data"}
...
jsonify(
Result(),
exclude_none=False, # default
)
# {"someValue": "data", "none_value": null}
charset
charset: str = 'utf-8'
— набор символов, который будет использоваться для кодирования и декодирования данных obj.
from rapidy.enums import Charset
from rapidy.encoders import jsonify
jsonify(
'data',
charset=Charset.utf32,
# or
charset='utf32',
)
dumps
dumps: bool = True
— флаг, который определяет, нужно ли делать из созданного объекта строку. Можно указать False
, если
объект уже является json
-строкой.
dumps_encoder
dumps_encoder: Callable = json.dumps
— любой вызываемый объект, который принимает объект и возвращает строку JSON.
from typing import Any
from rapidy.encoders import jsonify
def custom_encoder(obj: Any) -> str:
...
jsonify(
'data',
dumps_encoder=custom_encoder,
)
custom_encoder
custom_encoder: Callable | None = None
— параметр Pydantic custom_encoder
, передаваемый в модели Pydantic для
определения пользовательского кодировщика.