Skip to main content

轻松将您的 Python 类转换为 JSON 对象。

项目描述

可自定义的

Jsonizable 是一个 python 库,它允许将 json 对象解析为 python 类,反之亦然。这对于处理返回长 JSON 对象的复杂 API 非常有帮助。

Jsonizable 类允许用户在外部服务器接收到的 JSON 中插入逻辑,它在数据完整性检查中非常有用,只有两种方法writeread.

指导:

快速开始

使用此包的推荐方法是为每个类定义数据模式。为此,我们需要Meta在我们的对象中实现一个类,并在其中定义一个schema,它是一个包含我们 JSON 对象的名称和类型的字典。

class Car(Jsonizable):
    class Meta:
        schema = dict(
            name=str,
            model=str,
            year=int,
            max_speed=float,
            is_new=bool,
        )

通过这样做,我们将能够将Car对象解析并序列化为 JSON。

json = {
    "name": 'Tesla',
    "model": 'v6',
    "year": 2017,
    "max_speed": 186.63,
    "is_new": True,
}

# Parse the JSON object into a car
my_car = Car(json=json)
print(my_car.name)
>> Tesla

print(my_car.year)
>> 2017

#Serialize the Car into a JSON object
my_car.write()
>> { "name": "Tesla", "model": "v6", "year": 2017, "max_speed": 186.63, "is_new": True }

收藏品

也可以为我们的 Jsonized 类定义集合。我们可以用泛型类型定义字典、元组和列表:

class MyJsonizableClass(Jsonizable):
    class Meta:
        schema = dict(
            some_list=list,
            some_tuple=tuple,
            some_dict=dict,
        )

json = {
    some_list: [1, 2, "Forest", 4],
    some_tuple: [1, 2.23, 3, "hello"],
    some_dict: {
        "name": "John Doe",
        4: "Martin Lee",
    },
}

obj = MyJsonizableClass(json=json)

我们将再次收到一个带有内部参数的对象。

但是,在大多数情况下,我们希望为集合提供一个类型,该类型将被检查。我们可以强制类型如下:

class Lottery(Jsonizable):
    class Meta:
        schema=dict(
            first_prize=int,
            second_prizes=[int],
            third_prizes=(int, ),
        )

json = {
    "first_prize": 24666123,
    "second_prizes": [1244123, 4551235512, 32341234],
    "third_prizes": [2344123, 412555123, 234444512, 12333415],
}

obj = Lottery(json=json)

可选参数

有时我们的对象会有一些可选参数,显然无法将其发送None到 API,因为验证器会立即爆炸。在这种情况下,我们可能想要定义可选参数,为此我们将使用问号结束参数名称,my_param?如下例所示:

class MyQuanticClass(Jsonizable):
    class Meta:
        schema={
            "name": str, # This is mandatory parameter
            "state?": int, # This is an optional parameter
        }

json1 = {
    "name": "Electron",
}

class1 = MyQuanticClass(json=json1)

json2 = {
    "name": "Proton",
    "state": 3,
}
 class2 = MyQuanticClass(json=json2)

像魅力一样工作;)。

嵌套对象

好的,到现在为止都很容易,简单的对象和简单的界面。当我们处理讨厌的硬嵌套对象时会发生什么。为此,您可以简单地定义对象的层次结构并告诉父母儿子的类型。(最好举个例子,对吧?)

# Define a parent class
class PetShop(Jsonizable):
    class Meta:
        schema={
            "name": str,
            "pets": [Pet],
        }

# Define the subclass
class Pet(Jsonizable):
    class Meta:
        schema={
            "species": str,
            "name": str,
            "price": float,
        }

json={
    "name": "Funny puppies",
    "pets": [
        {
            "species": "dog",
            "name": "Tobby",
            "price": 150,
        },
        {
            "species": "bird",
            "name": "Mr. Tingles",
            "price": 20,
        }
    ]
}

pet_shop = PetShop(json=json)
print(pet_shop.pets[1].name)
>> Mr. Tingles

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

jsonizable-1.0.4.tar.gz (5.0 kB 查看哈希)

已上传 source

内置分布

jsonizable-1.0.4-py3-none-any.whl (6.6 kB 查看哈希

已上传 py3