Json
序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON、XML等。我们把变量从内存中变成可存储或传输的过程称之为序列化
反序列化:从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。变量内容从序列化的对象重新读到内存里称之为反序列化
json是什么呢?
是一种轻量级的数据交换格式。
完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,易于机器解析和生成,并有效地提升网络传输效率。
常用有2个方法,也是最基本的使用方法:
1、dumps:把字典转成json字符串
2、loads:把json字符串转成字典
import json
test_dict = {'a':1, 'b':2}
print(type(test_dict))
#把字典转成json字符串
json_text = json.dumps(test_dict)
print(json_text)
print(type(json_text))
#把json字符串转成字典
json_dict = json.loads(json_text)
print(json_dict)
print(type(json_dict))
输出结果为:
<class 'dict'>
{"a": 1, "b": 2}
<class 'str'>
{'a': 1, 'b': 2}
<class 'dict'>
还有有2个方法读写json文件的方法,与上述方法相比都少了s
1、dump:
2、load:
- 把字典转成json字符串,并保存到文件中
import json
import codecs
test_dict = {'a':1, 'b':2}
#把字典转成json字符串
json_text = json.dumps(test_dict)
#把json字符串保存到文件
#因为可能json有unicode编码,最好用codecs保存utf-8文件
with codecs.open('1.json', 'w', 'utf-8') as f:
f.write(json_text)
- 从json文件中读取到字典中
import json
import codecs
#从文件中读取内容
with codecs.open('1.json', 'r', 'utf-8') as f:
json_text = f.read()
#把字符串转成字典
json_dict = json.loads(json_text)
上面代码,我们也可以用load和dump修改。
- dump把字典转成json字符串并写入到文件
import json
import codec
test_dict = {'a':1, 'b':2} #把字典转成json字符串并写入到文件
with codecs.open('1.json', 'w', 'utf-8') as f:
json.dump(test_dict, f)
- load从json文件读取json字符串到字典
#coding:utf-8
import json
import codecs
#从json文件读取json字符串到字典
with codecs.open('1.json', 'r', 'utf-8') as f:
json_dict = json.load(f)
相关参数
- json.dumps 相关参数:
(1)sort_keys是告诉编码器按照字典排序(a到z)输出。
(2)indent参数根据数据格式缩进显示,读起来更加清晰
(3)separators参数的作用是去掉,,:后面的空格,从上面的输出结果都能看到”, :”后面都有个空格,这都是为了美化输出结果的作用,但是在我们传输数据的过程中,越精简越好,冗余的东西全部去掉,因
此就可以加上.
(4)skipkeys参数,在encoding过程中,dict对象的key只可以是string对象,如果是其他类型,那么在编码过程中就会抛出ValueError的异常。skipkeys可以跳过那些非string对象当作key的处理.
(5)输出真正的中文需要指定ensure_ascii=False
参考:廖雪峰python
http://yshblog.com/blog/104