Json文件存储
1、Json含义
- JSON,全称JavaScript Object Notaion,也就是JavaScript对象标记,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度高,是一种轻量级的数据交换格式
- json.loads(str):将json形式的字符串转换为python可操作的数据结构,如列表或字典
- json.dumps(data):将json对象转换成字符串
2、对象和数组
- 在JavaScript语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等,但是对象和数组是比较特殊且常用的两种类型
- 对象:它在JavaScript中是使用花括号{}起来的内容,数据结构为{key1:value2,key2:value2,…}的键值对结构。在面向对象的语言中,key为对象属性,value为对应的值。键名可以用整数和字符串来表示。值的类型可以是任意类型。
- 数组:数组在JavaScript中是[]包括起来的内容,数据结构为[“java”,“javascript”,“vb”,…]的索引结构。在JavaScript中,数组是一种比较特殊的数据类型,它可以像对象那样使用键值对,但还是索引用得多。同样,值的类型可以是任意类型。
- 一个JSON对象可以写为如下形式:
[ { "name":"Bob", "gender":"male", "birthday":"1992-10-18" }, { "name":"Selina", "gender":"female", "birthday":"1995-10-18" } ]
3、读取JSON文本(import json)
- loads()方法将JSON文本字符串转换为JSON对象
- dumps()方法将JSON对象转换为文本字符串
- json数据需要使用双引号包围,不能使用单引号
- 从JSON文本读取内容:
import json with open('data.json','r') as file: text = file.read() data = json.loads(text) print(data)
import json str_ = ''' [{ "name":"Bob", "gender":"male", "birthday":"1992-10-18" },{ "name":"Selina", "gender":"female", "birthday":"1995-10-18" }] ''' print(type(str_)) data = json.loads(str_) print(data) print(type(data)) #运行结果 # <class 'str'> # [{'name': 'Bob', 'gender': 'male', 'birthday': '1992-10-18'}, {'name': 'Selina', 'gender': 'female', 'birthday': '1995-10-18'}] # <class 'list'>
4、以JSON格式存储(import json)
- dumps()方法将JSON对象转化为字符串,然后再调用文件的write()方法写入文本
#dumps()方法将JSON对象转化为字符串 import json data = [{ "name": "Bob", "gender": "male", "birthday": "1992-10-18" }] with open('data.json', 'w') as fi: fi.write(json.dumps(data)) #运行结果,生成data.json文件,文件内容如下: #[{"name": "Bob", "gender": "male", "birthday": "1992-10-18"}]
- 如果想保存JSON格式,可以加一个参数indent,代表缩进字符个数
fi.write(json.dumps(data, indent=2)) #运行结果: [ { "name": "Bob", "gender": "male", "birthday": "1992-10-18" } ]
- JSON包含中文字符,为了输出中文,指定参数ensure_ascii为False,另外还要规定文件输出的编码
import json data = [{ "name": "王二", "gender": "男", "birthday": "1992-10-18" }] with open('data.json', 'w', encoding='utf-8') as fi: fi.write(json.dumps(data, indent=2, ensure_ascii=False)) # 运行结果 # [ # { # "name": "王二", # "gender": "男", # "birthday": "1992-10-18" # } # ]