JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
作为当前主流的数据传输格式,在他横空出世之前,网页上的数据传输是使用的XML的方式,而他一出现就广受欢迎。
实际上 json的格式和 python中的字典很像,也是由键值对组成,但是 python中的值可以为任何对象(列表、字典、字符串、数字等等),而 json中的值只能是数组(列表)、字典、字符串、数组、布尔值中的一中或几种。如下就是一个json数据:
{ "key1": "value1", "key2": [1,2,"value2"], "key3": { "key31": "value1", "key32": [1,2,"value2"], "key33": true, }, }
python中有个内置的处理json数据的库,该库有4个方法,分别是:dump(),dumps(),load(),loads()
dump(obj,fp)
参数obj表示python的字典对象,参数fq表示文件对象
将python对象的字典转为json格式的字符串,并写入fp文件对象对应的文件
import json dic = {"name": "python", "score": [1,2,3,4]} print(json.dump(dic, open("1.json", "w")))
dumps(obj)
参数obj表示python的字典对象
将字典转为json格式的字符串,这样就可以用另一种方式写入json文件了
import json dic = {"name": "hxd", "score": [1,2,3,4]} with open("2.json", "w") as f: f.write(json.dumps(dic, ensure_ascii=False))
load(fp)
fp是文件对象
该函数表示将该文件对象对应的文件内容读取并转为字典对象
import json json_data = json.load(open("1.json", 'r')) print(type(json_data)) # <class 'dict'> print(type(json_data)) # {'name': 'hxd', 'score': [1, 2, 3, 4]}
loads(string)
参数string是一个json类型的字符串
该函数将json数据类型的字符串转为python对象,在我们做爬虫时,爬到了json数据就应该使用该函数来将其转为dict对象,然后使用键的方式解析得到我们需要的数据
import json with open("2.json", "r") as f: text = f.read() json_data = json.loads(text) print(type(text)) #<class 'str'> print(text) # {"name": "hxd", "score": [1, 2, 3, 4]} print(type(json_data)) # <class 'dict'> print(json_data) # {'name': 'hxd', 'score': [1, 2, 3, 4]}
注意
- 注意,在使用dump()和dumps()的时候,如果字典内存在中文,需要设定ensure_ascii=False,不然会以asciima的方式出现
- 数组的()在转换为json格式是会变成列表的[]