将json文档序列化并反序列化为python数据结构
easyjsonparser的Python项目详细描述
easyjsonparser,一个用于分析和验证 json模型
现代web框架都使用orm系统来实现 数据库上的服务器端操作:例如,symfony3的条令 (php),Mongoose for MongoDB数据库。
orms能够读取数据并将其转换为 内存中的对象。他们也可以把一个特殊的物体转换成 到基础存储格式。
本项目背后的动机
虽然类orm系统在web开发中很常见,但它们是
对于其他目的来说都是不可能的。例如,分析配置
文件(是的,这就是我设计这个库的原因!)并验证
内容,或在文件中输出配置。 easyjsonparser只使用python的标准库,特别是
easyjsonparser是为python 3构建的。 从pypi获取库: 在本节中,我们将定义虚拟数据结构 如果您已经将数据加载到字典中了呢?然后,只需使用 我们只需打印用户实例即可获得其表示: 如果我们现在要分析 文档类型对象(即继承自 它们也有多种类型,但顶级数据结构必须始终是一个 好吧,现在如果我们想把它转换回json字符串呢?让我们使用 文档是继承自 jsonarraydocument的定义与使用常规的ejp.array()略有不同:模式必须定义为类属性而不是构造函数参数。 以下是特殊方法: 使用输入源 从字符串创建 从值列表中创建 从字符串创建 表示JSON字符串。 表示JSON整数。 *警告:布尔值和浮点值可以作为输入,但它们将被转换为整数,并使用 TOdo:添加一个选项以禁用/启用此行为 表示浮点数。从整数和布尔值转换的工作方式为 表示布尔值。从浮点数和布尔值转换的工作方式是 表示一个 表示JSON对象。 不能在构造函数中定义属性:它们必须定义为类属性,如下所示: 注意:请记住,需要使用 表示JSON数组。数组必须遵循必须传递给 注意:请记住,需要使用 表示空值。用于可选属性/值:如果要清除可选参数的内容,请将其值设置为 此软件在麻省理工学院许可证下分发
依赖关系
json
哪个模块
序列化和取消序列化源/目标数据。安装
> pip install easyjsonparser
基本示例
user
,它遵循以下模式:{"id":"xxx047AD_","username":"jsonisnice","age":16,"isAdmin":false}
easyjsonparser
可以使用以下代码将解析数据字符串提取到对象中:importeasyjsonparserasejpfromeasyjsonparser.documentimportJSONObjectDocumentclassUser(JSONObjectDocument):id=ejp.String()username=ejp.String()age=ejp.Integer()isAdmin=ejp.Boolean()# In this example, the data string is directly# written in the code but it can have# various source such as reading a file...data_string="""..."""user=User.loads(data_string)
加载
而不是加载
:user=User.load({"id":"xxx047AD_","username":"jsonisnice","age":16,"isAdmin":False})
>>>print(user)<JSONUserInstance:{"id":<JSONValueStringInstance:"xxx047AD_">,"username":<JSONValueStringInstance:"jsonisnice">,"age":<JSONValueIntegerInstance:16>,"isAdmin":<JSONValueBoolInstance:False>}>
用户的列表,该怎么办?
fromeasyjsonparser.documentimportJSONAArrayDocumentclassUserList(JSONArrayDocument);schema=User()users=UserList.load([{...},{...}])
jsonobjectdocument
或jsonarraydocument
的对象)可以相互混合。jsonobjectdocument
或jsonarraydocument
来实现json()
!>>>user.to_json()'{"id": "xxx047AD_", "username": "jsonisnice", "age": 16, "isAdmin": False}'
文档
jsonobjectdocument
或jsonarraydocument
的类。它们是特殊类型的对象
和数组
,因为它们包含用于解析数据的类方法。它们的行为类似于normal对象
和数组
但具有作为顶级数据结构的能力。classStringList(JSONArrayDocument):schema=String()
jsonobjectdocument.load(obj=none)
(@classmethod)obj
创建jsonobjectdocument
。如果没有输入,则计算空数据结构。如果输入是给定的,但不是措辞,则会引发异常。jsonobjectdocument.loads(obj_string)
(@classmethod)jsonobjectdocument
。使用python标准库中的json.loads()
将数据解析为字典。如果obj_string
未重新发送有效的json对象,则会引发异常。jsonarraydocument.load(*values)
(@classmethod)jsonarraydocument
。值
可以是可变数组,但也可以传递必须是列表或元组的单个输入。jsonarraydocument.loads(数组字符串)
(@classmethod)jsonarraydocument
。使用python标准库中的json.loads()
将数据解析为数组。如果数组字符串
不代表有效的json数组,则会引发异常。可用类型
ejp.string()
ejp.integer()
int()
。发生转换时会发出警告。ejp.float()
ejp.integer()
ejp.boolean()
ejp.integer()
ejp.null()
null
值。如果输入不是none
(在python中)或null
(作为json字符串),则会引发解析异常。ejp.object()
classMyObject(ejp.Object):property1=ejp.String()property2=ejp.Boolean()...
jsonobjectdocument
来定义顶级对象ejp.array()
ejp.array()
的构造函数的架构。如果架构无效,则会引发异常。> pip install easyjsonparser
0
jsonarraydocument
来定义顶级数组ejp.empty()
ejp.empty()
许可证
推荐PyPI第三方库