Python之json模块
一、JSON简介
概述:
JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也就是python里面的列表。
特点:
json独立于语言 json具有自我描述性,更加理解 json比xml更小、更快、更易理解
爬虫经常会获取接口数据,接口数据就是json格式
语法格式:
{key:value1, key2:value2} 键值对形式
格式1:JSON 对象
对象是一个无序的“‘名称/值’对”集合。一个对象以{左括号开始,}右括号结束。每个“名称”后跟一个:冒号;“‘名称/值’ 对”之间使用,逗号分隔。
{"name": "小李", "sex": 男}
格式2:JSON 数组
和普通的 JS 数组一样,JSON 表示数组的方式也是使用方括号 []。
{
"student":
[
{"name": "小李", "sex": "男"},
{"name": "小丽", "sex": "女"},
{"name": "小王", "sex": "男"}
]
}
注意事项:
- json的键值对的键部分,必须用双引号包裹,单引号都不行(所以如果在键中出现了关键字,也被字符化了),而js中对象没有强制要求(所以在键中不允许出现关键字)。
- json的键值对的值部分,不允许出现函数function,undefined,NaN,但是可以有null,js中对象的值中可以出现。
- json数据结束后,不允许出现没有意义的逗号
二、json模块
json模块是python内置的库,在使用的时候直接导入就可以。
json模块的操作使用相对较为简单,该模块只有四个方法dump()、load()、dumps()、loads()。
作用:
json模块的主要功能是将序列化数据从文件里读取出来或者存入文件。其中dump()是将数据存入文件中,load()是用于读取文件。而dumps()和loads()是对python对象进行操作。dumps()是将python对象编码成json字符串。loads()是将json字符串解码成python对象。
方法:
(1) json.dumps()
将python数据类型转换为json格式的字符串
import json
# Python字典
person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}
print(person)
print(type(person))
# Python字典转换为json字符串
jsonStr = json.dumps(person)
print(jsonStr)
print(type(jsonStr))
写入文件的方式:
写入文件的方式:
import json
person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}
jsonStr = json.dumps(person)
# 打开文件 在文件里写入转成的json串
with open('test.json', 'w', encoding='utf-8') as f:
f.write(jsonStr)
(2) json.dump()
将python数据类型转换并保存到json格式文件内
import json
person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}
json.dump(person, open('data.json', 'w'), sort_keys=True, indent=4, separators=(',', ': '))
参数:
sort_keys: 是否排序 indent: 定义缩进距离
separators: 是一个元组,定义分隔符的类型
skipkeys:是否允许json字串编码字典对象时 字典的key不是字符串类型
json.dumps和json.dump的区别:
jump()不需要使用.write()方法,只需要写那个字典,那个文件即可; 而 dumps()需要使用.write()方法写入
如果把字典写到文件里面的时候,dump()好用;但是如果不需要操作文件,或需要把内容存储到数据库和excel,则需要使用dumps()先把字典转换成字符串,再写入
(3) json.loads()
将json格式的字符串转换为python的类型
import json
# Python字典
person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}
print(person)
print(type(person))
# Python字典转换为json字符串
jsonStr = json.dumps(person)
print(jsonStr)
print(type(jsonStr))
# json字符串再转换为Python字典
python_obj = json.loads(jsonStr)
print(python_obj)
print(type(python_obj))
文件操作
import json
f = open('data.json', encoding='utf-8')
content = f.read() # 使用loads()方法需要先读文件
python_obj = json.loads(content)
print(python_obj)
(4) json.load()
从json格式的文件中读取数据并转换为python的类型
import json
python_obj = json.load(open('data.json','r'))
print(python_obj)
print(type(python_obj))
json.load和json.loads()的区别
loads() 传的是json字符串,而 load() 传的是文件对象
使用 loads() 时需要先读取文件在使用,而load() 则不用
json模块就是用来读写数据的,用法也很简单,需要掌握的也不多。