参考文章:
http://liuzhijun.iteye.com/blog/1859857
http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html
序列化:将对象的状态信息转换为可以存储或者可以通过网络传输的过程,传输格式可以是json,xml等。
反序列化就是从存储区域(json,xml)读取反序列化对象的状态,重新创建该对象。
python的json模块序列化与反序列化的过程分别是encoding,decoding
encoding:把一个python对象编码转换成json字符串
decoding:把json格式字符串解码转换成python对象
json.dumps方法对简单数据类型encoding:
编码规则:
json.loads方法处理简单数据类型的decoding转换:
解码规则:
从上面两个图可以看出python转换成json的时候,list、tuple都会转成array,而json转成python的时候,array就只转成list了。
其他用法:
1.json.dumps(data, sort_keys=True)可以对key排序 eg: data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ] json.dumps(data, sort_keys=True) SORT: [{"a": "A", "b": [2, 4], "c": 3.0} 2.json.dumps(data, sort_keys=True, indent=2)indent参数根据数据格式缩进显示,读起来更加清晰 3.separators参数的作用是去掉,,:后面的空格,从上面的输出结果都能看到", :"后面都有个空格,这都是为了美化输出结果的作用,但是在我们传输数据的过程中,越精简越好,冗余的东西全部去掉,因此就可以加上separators参数 4.skipkeys参数,在encoding过程中,dict对象的key只可以是string对象,如果是其他类型,那么在编码过程中就会抛出ValueError的异常。skipkeys可以跳过那些非string对象当作key的处理. eg: import json data= [ { 'a':'A', 'b':(2, 4), 'c':3.0, ('d',):'D tuple' } ] try: print json.dumps(data) except (TypeError, ValueError) as err: print 'ERROR:', err print print json.dumps(data, skipkeys=True) 输出: ERROR: keys must be a string [{"a": "A", "c": 3.0, "b": [2, 4]}]
json.load(),dump()
json格式字符串写入到文件流中
如果对于大数据,把他编码到一个类文件(file-like)中更合适,load()
和dump()
方法就可以实现这样的功能。
json 主要包含四个方法:
dump和dumps(从python生成json),load和loads(解析json成python的数据类型)dump和dumps的唯一区别是 dump会生成一个类文件对象,dumps会生成字符串,同理load和loads分别解析类文件对象和字符串格式的json。