上面的内容,我们梳理了json模块的四个常用的方法(参见知其然,更要知其所以然!详解用Python中json模块进行序列化操作),并对其中方法中的若干参数进行了有史以来最为详细的梳理。
梳理梳理
好奇的小伙伴们肯定会问:不就是字符串转json、json转字符串、json存入和读取么?干嘛弄这么复杂?殊不知,对于这些参数的提供,你掌握的越多,你就可以更好的使用这个模块,参数掌握得越详细,你甚至可以用这些参数实现一些其它意想不到的功能……
有吗?
我们简单来看一下!
如何快速记忆
对于四个方法的用法,我们不做探讨,记住这一点:
一定要记住它
方法有s不涉及文件对象,dump是写、load是读,使用方法pickle和json类似。
上面讲了参数了解越多,你在使用时可能会有一些意想不到的收获。来看下面两个拓展例子
字典排序
我们之前的内容讨论了如何排序一个字典(参见杂乱无章的数据结构如何进行排序,简明讲述Python字典排序那些事),其中梳理也一些常用的字典排序的方式。还有没有别的办法呢?我们知道,json.dumps()方法中有一个sort_keys参数,设置为True时,它可将字典中的元素按照键顺序进行排列,利用这一条我们实现一个简单的字典排序的功能。让Python字典在json模块中走一槽,即可排列好顺序,是不是很有意思?
这功能你想到了吗?
实现过程如下:
# 导入模块
import json
# 定义一个字典
d = {'b': 2, 'c': 3, 'a': 1, 'd': 4, 'e': 5}
# 字典转化为json字符串
dD = json.dumps(d, sort_key=True)
# json字符串还原为Python字典
dL = json.loads(dD)
dL
>>>{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
已经排好序了!
参数还有别的用法吗?
四个方法中提供的参数很有用的,限于篇幅原因,我们今天只是探讨其中比较常用的应用,以便加深大家对于内置模块中一些不常用的参数重要性的认识。对于json数据的处理,大家知道,如果对某些参数不加设定,json只能存储Python内默认的数据结构及类型,如果要存储其它数据类型(并非不可能),我们需要自己定义一些属性,而这些属性定义的基础是我们必须熟练掌握方法中的一些可选参数。
应该还有别的用法!
我们还是以刚才的字典为例,使用dump()方法将它写入本地文件中,这次实现的功能是将默认的分隔符改为自定义的一个字符,实现方法很简单,就是将('%', '@')这样的元组传入到separator中。代码如下:
f = open('C:\\json.JSON', 'w')
dD = json.dump(d, f, separators=('%', '@'))
f.close()
打开文件json.JSON,可以看到文件是这样的
{"b"@2%"c"@3%"a"@1%"d"@4%"e"@5}
比起{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5},实现了一个简单的加密效果。当然,这种加密是很容易被破解的。想自己实现一些稍微复杂一点的加密,可以参照(使用Python强制破译凯撒加密算法、使用Python实现凯撒加密算法)。但这些都是很容易被破解的,本号后续会推出一些关于MD5和SHA256相关加密算法和hashlib模块的探讨,感兴趣的朋友们关注我。
言归正传,我们将上面的json文件解析一下,看看是否能获取到有效数据。
f_r = open('C:\\json.JSON', 'r')
dL = json.load(f_r)
这样在解析时,会抛出json.decoder.JSONDecodeError异常。
后续更精彩,关注不迷路!
如果在load()函数中自定义一个编码器,我们就能获得非JSONDecode数据,怎么样在函数中替换我们的"%"和"@"符号呢?留给大家自行解决吧欢迎大家留言讨论,感兴趣的朋友加关注!
转载请注明出处,百家号:Python高手养成