一个用于序列化和反序列化URL查询字符串的库,它可以表示分层数据结构,也可以表示为JSON。这很方便,例如,如果您希望有一个web api,它将json对象作为post主体,但它可能还需要响应get请求,对于这个请求,更可读的参数集是合适的。

jsonurl的Python项目详细描述


简介

jsonurl是一个简单的库,用于管理表示层次结构数据的url查询字符串的序列化和反序列化。

它将采用可以用json表示的python数据结构,并将它们转换为用于url查询字符串的平键/值对,还将采用url查询字符串并将它们解析为分层数据结构。

如果您希望在url本身而不是post主体中传递结构化数据,这很方便。这可能是对web api的补充,webapi还接受post请求主体中的json字符串,使用get提供等效的功能,而不构造包含url编码的json对象的url。

用法

>>> import jsonurl

###转换数据结构

简单的平面词典

>>> d = {"one" : 1, "two" : 2}
>>> jsonurl.query_string(d)
'one=1&two=2'

具有嵌套字典的字典

>>> d = {"one" : {"two" : 2, "three" : 3}, "four" : 4}
>>> q = jsonurl.query_string(d)
>>> q
'four=4&one.three=3&one.two=2'

如果我们不希望jsonurl为我们实际准备url的查询部分,我们还可以获得一个平面词典作为层次词典的代理。

>>> jsonurl.dict_to_args(d)
{'four': '4', 'one.three': '3', 'one.two': '2'}

我们可以将查询字符串解析回python dictionary对象

>>> jsonurl.parse_query(q)
{'four': 4, 'one': {'three': 3, 'two': 2}}

我们还可以序列化嵌套列表:

>>> d = {"one" : 1, "two" : [2,3,4]}

扁平化的数据结构:

>>> jsonurl.dict_to_args(d)
{'two.1': '3', 'two.0': '2', 'two.2': '4', 'one': '1'}

查询字符串本身:

>>> q = jsonurl.query_string(d)
>>> q
'one=1&two.0=2&two.1=3&two.2=4'

这可以轻松地解析为python数据结构

>>> jsonurl.parse_query(q)
{'two': [2, 3, 4], 'one': 1}

我们可以继续序列化任意复杂的数据结构

>>> d = {"one" : [ {"two" : 2, "three" : 3}, 4 ]}
>>> q = jsonurl.query_string(d)
>>> q
'one.0.three=3&one.0.two=2&one.1=4'

###转义字符

jsonurl还将处理url转义:

>>> q = {"escape_me" : "I'll need escaping"}
>>> s = jsonurl.query_string(q)
>>> s
'escape_me=I%27ll+need+escaping'

jsonurl使用“+”代替%20来提高可读性

它还可以在解析期间对所有内容进行调整:

>>> jsonurl.parse_query(s)
{'escape_me': "I'll need escaping"}

由于jsonurl使用“.”作为分隔符,因此将对名称中带有“.”的字典键进行转义。在序列化过程中,我们在每个“.”前面加上另一个前缀:

>>> d = {"user.names" : ["richard", "jones"]}
>>> q = jsonurl.query_string(d)
>>> q
'user..names.0=richard&user..names.1=jones'

“.”然后在解析期间转换回:

>>> jsonurl.parse_query(q)
{'user.names': ['richard', 'jones']}

###参数排序

它对查询参数进行排序,以便更容易读取长查询字符串:

>>> d = {"b" : "last", "a" : [1,2,3]}
>>> jsonurl.query_string(d)
'a.0=1&a.1=2&a.2=3&b=last'

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

推荐PyPI第三方库


热门话题
序列化反序列化java。awt。颜色>java。木卫一。InvalidClassException   java禁用多个日期范围jDateChooser   java为什么我的特例apper会被扔进泽西/灰熊?   JavaIntelliJ比较两个覆盖率数据   java什么是servletsdefault。你怎么办?   单击几下libgdx后java按钮没有响应   使用java将字符串转换为JSONArray   文件系统在java中刷新fileSystemViewer   java如何在hibernate中避免脏检查   java奇怪的问题,带有分号和“无法解决…”   java将值从子面板传递到父面板   HTML JTextPane CSS的Java FontSizeAction   java文件代码神秘地变成了一堆(0000)