【21天学习挑战赛】Python学习第二篇:json标准库
活动地址:CSDN21天学习挑战赛
——
JSON(JavaScript Object Notation ,对象表示法), 是一种轻量级的文本数据交换格式。
JSON的数据格式其实就是python里面的字典格式,即大括号内存在键和值。
其中值可以包含方括号括起来的数组,也就是python里面的列表。
——
特点:
json 独立于语言
json 具有自我描述性,更容易理解
json 比 xml 更小,更快,更易解析
爬虫检查会获取接口数据,接口数据就是 json 格式
——
json 格式
键值对用冒号隔开,每对键值用逗号链接。
json的键值对的键部分,必须用双引号"包裹 (所以如果在键中出现了关键字,也被字符化了),而js中对象没有强制要求(所以在键中不允许出现关键字)。
json数据结束后,不允许出现没有意义的逗号,如:{“name”:“admin”,“age”:18,}
json的键值对的值部分,不允许出现函数function,undefined,NaN,但是可以有null,js中对象的值中可以出现。如{“name”:function(),“age”:undefined,“show”:NaN} 这三种情况都是错误的。
json 对象:
{
"name":"小明",
"age":18
}
json 数组:
{
"student":
[
{"name":"小明","age":11}
{"name":"小红","age":10}
{"name":"小白","age":12}
]
}
——
json 模块的使用
json.dumps(obj)
: 将python数据类型转换为json格式的字符串。
json.dump(obj, fp)
: 将python数据类型转换并保存到son格式的文件内。
数据从Python转换到json格式,在数据类型上会有变化
json.loads(s)
: 将json格式的字符串转换为python的类型。
json.load(fp)
: 从json格式的文件中读取数据并转换为python的类型。
反过来,将json格式转化为python内置类型
——
json.dumps()的使用
语法格式:
json.dumps(obj, *,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
import json
person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
print(person)
print(type(person))
jsonstr = json.dumps(person)
print(jsonstr)
print(type(jsonstr))
先创建一个字典, 可以看到python数据类型转换为json格式之后的区别
python字典打印输出的键值单引号, json格式打印输出是双引号,类型变为 str
True 变为 true
使用参数格式化输出json字串。
import json
person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
jsonstr = json.dumps(person,sort_keys=True,indent=4,separators=(',',':'))
print(jsonstr)
sort_kyes
: 是否排序
indent
: 定义缩进距离为4
separators
: 是一个元组,定义分隔符的类型(键值以冒号分隔,每个键值对以逗号分隔)通过这个参数可以修改分隔的符号
——
json.dump()的使用
语法格式:
json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
import json
person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
json.dump(person,open('data.json','w'),indent=4)
查看创建好并写入的json字串的data.json 文件。
dump() 写入文件可以直接在里面添加参数即可写入。
相比于 dumps() 要把json 字串写入文件的话, 需要使用.write()方法写入。如 f.write(‘data.json’,‘w’)
——
json.loads()的使用
语法格式:
json.loads(s, *,cls=None,object_hook=None,parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
import json
person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
jsonstr = json.dumps(person)
print(jsonstr)
print(type(jsonstr))
python_obj = json.loads(jsonstr)
print(python_obj)
print(type(python_obj))
print("转换后字典的键:")
print(python_obj.keys())
json格式的字符串转换为python的类型。
——
json.load() 的使用
语法格式:
json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
对文件进行操作
import json
python_obj = json.load(open('data.json','r'))
print(python_obj)
print(type(python_obj))
json.load() 直接读取 data.json 文件,并转换成了python的类型。
loads() 传的是json字符串,而 load() 传的是文件对象
使用 loads() 时需要先读取文件在使用,如读取操作 f.read(),而 load() 则不用
不管是dump还是load,带s的都是和字符串相关的,不带s的都是和文件相关的
——