Python3编写网络爬虫09-数据存储方式二-JSON文件存储
2.JSON文件存储
全称为JavaScript Object Notation 通过对象和数组的组合来表示数据,构造简洁且结构化程度非常高。
是一种轻量级的数据交换格式
2.1 对象和数组
在JavaScript中 一切皆对象。 因此任何类型都可以通过json来表示,如 字符串,数字,对象,数组等
对象 : 在JavaScript中使用{}括起来 数据结构为{key1:value,key2:value2...}的键值对结构
在面向对象中 key为对象的属性,value为对应的值,键名可以使用整数和字符串表示,值的类型可以是任意类型。
数组 : 数组在JavaScript中使用方括号[] 括起来 数据结构为["java","JavaScript","Python"...]索引结构。
在JavaScript中数组是一种比较特殊的数据类型,可以像对象那样使用键值对,更多的是索引,值可以是任意类型。
示例:
[{ "name" : "Bod", "gender" : "male", "birrhday" : "1992-10-19" },{ "name" : "Selina", "gender" : "female", "birthday" : "1995-10-18" }]
JSON 可以是以上两种形式自由组合,无限次嵌套,结构清晰,数据交换的极佳方式。
2.2 读取JSON
Python为我们提供了简易的JSON库实现JSON文件的读写操作。
可以调用 loads()方法将JSON文本字符串转为JSON对象,
dumps() 方法将JSON对象转为文本字符串
示例:
import json str1 = ''' [{ "name" : "Bod", "gender" : "male", "birrhday" : "1992-10-19" },{ "name" : "Selina", "gender" : "female", "birthday" : "1995-10-18" }] ''' print(type(str1))#str data = json.loads(str1) print(data) print(type(data))#list
通过索引来获取对应的内容 例如 第一个元素的name属性
print(data[0]['name']) print(data[0].get('name'))
推荐第二种方式 get()方法 如果键名不存在 不会报错 返回None 另外可以传入第二个参数 默认值
print(data[0].get('age')) print(data[0].get('age',20))
注意: JSON的数据需要用双引号括起来 不能使用单引号
示例:
import json str1 = ''' [{ 'name' : 'Bod', 'gender' : 'male', 'birrhday' : '1992-10-19' },{ 'name' : 'Selina', 'gender' : 'female', 'birthday' : '1995-10-18' }] ''' data = json.loads('str1')
报错 解析错误
如何读取文本文件json内容
import json with open('data.json','r') as file: str1 = file.read() data = json.loads(str1) print(data)
2.3 输出JSON
调用 dumps() 将JSON对象转化为字符串
示例:
import json data = [{ "name" : "Bod", "gender" : "male", "birrhday" : "1992-10-19" }] with open('data.json','w') as file: file.write(json.dumps(data,indent=2))#indent 缩进字符个数
如果JSON包含中文字符
示例:
import json data = [{ "name" : "小米", "gender" : "男", "birrhday" : "1992-10-19" }] with open('data.json','w') as file: file.write(json.dumps(data,indent=2))#indent 缩进字符个数
结果中文字符 变成了Unicode字符 需要指定参数 ensure_ascii=False
示例:
import json data = [{ "name" : "小米", "gender" : "男", "birrhday" : "1992-10-19" }] with open('data.json','w') as file: file.write(json.dumps(data,indent=2,ensure_ascii=False))#indent 缩进字符个数
后面做数据分析时会经常用到 需熟练掌握