前言:
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
处理json数据python里有专用的内置模块:import json
Json 模块提供了四个方法: dumps、dump、loads、load
一. dumps和dump 序列化方法:
dumps只完成了序列化为str;
dump必须传文件描述符,将序列化的str保存到文件中;
def 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):
# 序列号 “obj” 数据类型 转换为 JSON格式的字符串
data = [{
"name": '鲍勃',
"gender": "male",
"birthday": "1992-10-18"
}]
with open('data.json','w') as f:
f.write(json.dumps(data,indent=2,ensure_ascii=False))
print(type(json.dumps(data,indent=2,ensure_ascii=False))) #
def 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):
#序列号 “obj” 数据类型 转换为 JSON格式的字符串,再将字符串写入文件中,也就是说”tp”这个参数必须有。
data = [{
"name": '鲍勃',
"gender": "male",
"birthday": "1992-10-18"
}]
with open('data.json','w') as f:
json.dump(data,f,indent=1,ensure_ascii=False)
二. loads和load 反序列化方法:
loads 只完成了反序列化;
load 只接收文件描述符,完成了读取文件和反序列化;
def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
将包含str类型的JSON文档反序列化为一个python对象
with open('data.json','r') as f:
data = json.loads(f.read())
print(type(data)) #
def load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
将一个包含JSON格式数据的可读文件饭序列化为一个python对象
with open('data.json','r') as f:
data = json.load(f)
print(type(data)) #
三、列举一下dumps()的可填参数:
skipkey:默认为False,当dict对象里的数据不是Python的基本数据类型;(str,unicode,int,long,float,bool,None)时,当skipkey为False,就会报错,如果skipkey为True,则可以跳过这类key;
indent:如果填0或者不填,则按照一行进行打印,否则按照indent的数值显示前面的空格(正整数形式);
separators:分隔符,默认为“(',',':')”,它表示key之间用“,”隔开,key和value之间用“:”隔开;
encoding:编码格式,默认值是UTF-8;
sort_keys:对key、value进行排序,默认值是False,即不排序;
ensure_ascii:默认为True,如果dict对象里含有none-ASCII的字符,则显示\uXX的格式,如果为False,则能正常显示出来;