环境:python-3.6.5
JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。Python 中自带了 json 模块,直接 import json 即可使用
官方文档:http://docs.python.org/librar…Json 在线解析网站:http://www.json.cn/#
json 简单说就是 javascript 中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。
对象:对象在 js 中表示为 {} 括起来的内容,数据结构为 { key:value, key:value, …}的键值对的结构,在面向对象的语言中,key 为对象的属性,value 为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象这几种。数组:数组在 js 中是中括号 [] 括起来的内容,数据结构为 [“Python”, “javascript”, “C++”, …],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
json 模块使用
json 模块提供了四个功能:dumps,dump,load,loads,用于字符串和 python 数据类型进行转换。
json.loads()json.loads()方法将 JSON 文本字符串转换为 Python 对象,从 JSON 到 Python 的类型转化对照如下:
JSON
Python
object
dict
array
list
string
unicode
number(int)
int
number(real)
float
true
True
false
False
null
None
示例:
import json
# JSON 文本字符串
str_list = ‘[“a”,”b”,”c”,”d”]’
str_dict = ‘{“name”:” 小白 ”,”age”:1000}’
# json.loads 将文本字符串转化为 JSON 对象,在 Python 里就是 Python 对象了
data_list = json.loads(str_list)
data_dict = json.loads(str_dict)
print(type(data_list))
print(type(data_dict))
print(data_list)
print(data_dict)
运行结果:
<class ‘list’>
<class ‘dict’>
[‘a’, ‘b’, ‘c’, ‘d’]
{‘name’: ‘ 小白 ’, ‘age’: 1000}
说明:JSON 文本字符串中,数据应该用双引号括起来,不然会报错误,比如上面 str_list 和 str_dict 中的值都应该用双引号,数字就不用。
json.dumpsjson.dumps()方法实现 python 类型转化为 json 字符串,返回一个 str 对象把一个 Python 对象编码转换成 Json 字符串。从 Python 到 JSON 的类型转化对照如下:
Python
JSON
dict
object
list,tuple
array
str
string
int, float, int- & float-derived Enums
number
True
true
False
false
None
null
示例:
import json
data_list = [1,2,3,4]
data_dict = {‘name’:’ 小黑 ’,’age’:1000}
print(json.dumps(data_list))
print(json.dumps(data_dict))
运行结果:
[1, 2, 3, 4]
{“name”: “\u5c0f\u9ed1”, “age”: 1000}
说明:dumps 方法可以将 Python 数据类型转化为 JSON 文本字符串,但是可以看到当有中文的时候,转换后中文字符都变成 Unicode 字符,要输出中文需要设置 dumps 方法的参数 ensure_ascii=True 设置为 ensure_ascii=False。如下:
print(json.dumps(data_dict,ensure_ascii=False))
# 运行结果:{“name”: “ 小黑 ”, “age”: 1000}
此外,如果需要将数据保存为文本的时候,还需要指定文件的编码格式为 utf-8,比如将上面的 data_dict 数据 (里面有中文字符) 保存为 data.json 文件,代码如下:
with open(‘data.json’,’w’,encoding=’utf-8′) as f:
f.write(json.dumps(data_dict,ensure_ascii=False))
否则打开保存的文件,会有乱码。
如果要处理的是文件而不是字符串,可以使用 json.dump()和 json.load()来编码和解码 JSON 数据。比如:
# 写入数据到文件
data_list = [{‘name’:’ 小白 ’},{‘name’:’ 小黑 ’}]
with open(‘data2.json’,’w’,encoding=’utf-8′) as f:
json.dump(data_list,f,ensure_ascii=False)
# 从文件读取数据
with open(‘data2.json’,’r’,encoding=’utf-8′) as f:
data = json.load(f)
print(data)
参考资料
菜鸟教程:Python3 JSON 数据解析
静觅崔庆才的个人博客:5.1.2-JSON 文件存储