一、概念
序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON、XML等。反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。
JSON(JavaScript Object Notation):一种轻量级数据交换格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是JavaScript中的一个子集。
Python2.6开始加入了JSON模块,无需另外下载,Python的Json模块序列化与反序列化的过程分别是 encoding和 decoding
encoding:把一个Python对象编码转换成Json字符串
decoding:把Json格式字符串解码转换成Python对象
//保证在使用JSON处理的时候字符是以UTF8编码的
对于简单数据类型(string、unicode、int、float、list、tuple、dict),可以直接处理。
二、对简单数据类型的encoding 和 decoding
使用简单的json.dumps方法对简单数据类型进行编码,例如:
import json
obj = ['string', 1,1.1,[1,2,3],{'key':'value'}]
jsonobj = json.dumps(obj)
print jsonobj
print type(jsonobj)
输出:
["string", 1, 1.1, [1, 2, 3], {"key": "value"}]
json.dumps()方法返回了一个str对象jsonobj,我们接下来在对jsonobj进行decode,得到原始数据,需要使用的json.loads()函数:
oringalobj = json.loads(jsonobj)
print type(oringalobj)
print oringalobj[4]['key']
print oringalobj
输出:
value
[u'string', 1, 1.1, [1, 2, 3], {u'key': u'value'}]
loads方法返回了unicode类型对象。
三、JSON应用
json一键对应多值
# -*- coding:utf-8 -*-
import json
dic1 = {}
key = 'key1'
value = 'value1'
dic1.setdefault(key, []).append(value)
value = 'value2'
dic1.setdefault(key, []).append(value)
print('dic1=', dic1)
jsobj=json.dumps(dic1)
with open('result.json','w')as f:
f.write(jsobj)
f.close()
字典生成json文件
# -*- coding:utf-8 -*-
import json
key = ['key1','key2','key3']
value = ['value1','value2','value3']
d=dict(zip(key,value))
jsobj=json.dumps(d)
with open('result.json','w')as f:
f.write(jsobj)
f.close()