一个用于序列化和反序列化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'