将json文档序列化并反序列化为python数据结构

easyjsonparser的Python项目详细描述


easyjsonparser,一个用于分析和验证 json模型

生成状态

现代web框架都使用orm系统来实现 数据库上的服务器端操作:例如,symfony3的条令 (php),Mongoose for MongoDB数据库。

orms能够读取数据并将其转换为 内存中的对象。他们也可以把一个特殊的物体转换成 到基础存储格式。

本项目背后的动机

虽然类orm系统在web开发中很常见,但它们是 对于其他目的来说都是不可能的。例如,分析配置 文件(是的,这就是我设计这个库的原因!)并验证 内容,或在文件中输出配置。

依赖关系

easyjsonparser只使用python的标准库,特别是 json哪个模块 序列化和取消序列化源/目标数据。

easyjsonparser是为python 3构建的。

安装

从pypi获取库:

> 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([{...},{...}])

文档类型对象(即继承自jsonobjectdocumentjsonarraydocument的对象)可以相互混合。

它们也有多种类型,但顶级数据结构必须始终是一个jsonobjectdocumentjsonarraydocument

好吧,现在如果我们想把它转换回json字符串呢?让我们使用来实现json()

>>>user.to_json()'{"id": "xxx047AD_", "username": "jsonisnice", "age": 16, "isAdmin": False}'

文档

文档是继承自jsonobjectdocumentjsonarraydocument的类。它们是特殊类型的对象数组,因为它们包含用于解析数据的类方法。它们的行为类似于normal对象数组但具有作为顶级数据结构的能力。

jsonarraydocument的定义与使用常规的ejp.array()略有不同:模式必须定义为类属性而不是构造函数参数。

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()

表示JSON字符串。

ejp.integer()

表示JSON整数。

*警告:布尔值和浮点值可以作为输入,但它们将被转换为整数,并使用int()。发生转换时会发出警告。

TOdo:添加一个选项以禁用/启用此行为

ejp.float()

表示浮点数。从整数和布尔值转换的工作方式为ejp.integer()

ejp.boolean()

表示布尔值。从浮点数和布尔值转换的工作方式是ejp.integer()

ejp.null()

表示一个null值。如果输入不是none(在python中)或null(作为json字符串),则会引发解析异常。

ejp.object()

表示JSON对象。

不能在构造函数中定义属性:它们必须定义为类属性,如下所示:

classMyObject(ejp.Object):property1=ejp.String()property2=ejp.Boolean()...

注意:请记住,需要使用jsonobjectdocument来定义顶级对象

ejp.array()

表示JSON数组。数组必须遵循必须传递给ejp.array()的构造函数的架构。如果架构无效,则会引发异常。

> pip install easyjsonparser
0

注意:请记住,需要使用jsonarraydocument来定义顶级数组

ejp.empty()

表示空值。用于可选属性/值:如果要清除可选参数的内容,请将其值设置为ejp.empty()

许可证

此软件在麻省理工学院许可证下分发

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
性能为什么java后台进程很慢?   java希望在SeleniumWeb驱动程序中为多个命令编写一个代码   java Firebase数据库返回布尔NullPointerException   java Wicket:指定全局应用程序属性的模式   java在Android中创建并连接到SQLite数据库   加密创建加密java聊天服务器/客户端的正确步骤是什么?   将Java8流映射到元素的方法引用   java SQL表到矩阵   java如何获取Firebase中的最后一个节点?   swing Java GridBag布局网格定位问题   swing Java Resultset和AbstractTableModel以更新JTable   非maven项目上的java链接maven依赖项   c#帮助选择正确的数据结构   java如何查看annotationbase配置的Springbean依赖关系图   macos在Mac上存储Java系统属性的位置?