注:最后有面试挑战,看看自己掌握了吗
🌸I could be bounded in a nutshell and count myself a king of infinite space.
特别鸣谢:木芯工作室 、Ivan from Russia
JSON格式文件
上文看出,没有经过格式化处理的文本非常垃圾,必须得有个格式!
别人如果想要通过程序自动读取该文件信息,也非常难受
JSON就是来解决这个问题的 弥撒亚
Messiah
JSON格式
JavaScript Object Notation ---------JavaScript对象标注符号
序列化与反序列化
序列化:把python数据转换为JSON格式
反序列化:反过来
作用
序列化后的JSON格式字符串可以存储在文件或数据中,也能通过网络连接传送到远程的机器
JSON常用数据结构
键值对的集合
在不同语言被理解为不同的东西
可能是 对象,记录, 结构, 字典, 哈希表, 有序列表, 关联数组
值的有序列表
大部分语言中 被理解为数组
python种 主要对应列表元组
JSON数据类型与Python数据类型之间的转化
python自带处理JSON数据的模块
该模块的dumps
实现python数据转为JSON数据
loads
实现JSON数据转为python数据的过程
JSON格式和python的区别
json的对象格式在开始和结尾加了单引号,因为所有json数据都是以字符串形式表示的
dumps
loads
# coding=gbk import json p_d = {'tt':20,'eq':95,'cc':52} print(p_d) p_2_j = json.dumps(p_d)# dumps把字典转为json数据 print(p_2_j)# JSON格式和python的区别:json的对象格式在开始和结尾加了单引号,因为所有json数据都是以字符串形式表示的 j_2_p = json.loads(p_2_j) print(j_2_p) {'tt': 20, 'eq': 95, 'cc': 52} {"tt": 20, "eq": 95, "cc": 52} {'tt': 20, 'eq': 95, 'cc': 52}
读写json文件
python的json
模块为json提供了dump
和load
操作对象
dump 把python 写到json文件
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–python语言对象
f-------以字符串知名存储的文件名,可以带路径
ensure_ascii—表示只接受ascii表数据类型, 当为false时候接受其他 如中文
Serialize obj
as a JSON formatted stream to fp
(a
.write()
-supporting file-like object).
将“ obj”序列化为 JSON 格式的流到“ fp”(a”. write ()“-支持类似文件的对象)。
If skipkeys
is true then dict
keys that are not basic types
(str
, int
, float
, bool
, None
) will be skipped
instead of raising a TypeError
.
如果“ skipkeys”为真,那么“ dict”键不是基本类型(“ str”、“ int”、“ float”、“ bool”、“ None”)将被跳过而不是引发“ TypeError”。
If ensure_ascii
is false, then the strings written to fp
can
contain non-ASCII characters if they appear in strings contained in
obj
. Otherwise, all such characters are escaped in JSON strings.
如果“ sure _ ascii”为 false,则写入“ fp”的字符串可以中包含的字符串中出现的非 ASCII 字符否则,所有这些字符将在 JSON 字符串中转义。
load 把json写到 python数据类型
def load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None,object_pairs_hook=None, **kw):
Deserialize fp
(a .read()
-supporting file-like object containing
a JSON document) to a Python object.
读写JSON文件基本案例
# coding=gbk import json import sys def saveTOJSON(filename,dicObject): flag = False if type(dicObject)!=dict: return flag try: j_file = open(filename,'w') json.dump(dicObject,j_file,ensure_ascii=False) flag = True except: print('个%s这'%(filename)) finally: if flag: j_file.close() return flag def GetFromJSON(filename): flag = False dicObject = {} try: j_file = open(filename,'r') dicObject=json.load(j_file) flag = True except: print("duqu%schucuo"%(filename)) finally: if flag: j_file.close() return dicObject students = {'mingzi':"xiaoming",'tt':"20",'eq':95,'cc':52} filename='student.json' f_OK = saveTOJSON(filename,students) if f_OK: print("baocun chenggong") else: sys.exit() d_get_s=GetFromJSON(filename) if d_get_s: print(d_get_s)# 打印返回的字典对象
# coding=gbk import json import sys def saveTOJSON(filename,dicObject): flag = False try: j_file = open(filename,'w') json.dump(dicObject,j_file,ensure_ascii=False) flag = True except: print('个%s这'%(filename)) finally: if flag: j_file.close() return flag def GetFromJSON(filename): flag = False dicObject = {} try: j_file = open(filename,'r') dicObject=json.load(j_file) flag = True except: print("duqu%schucuo"%(filename)) finally: if flag: j_file.close() return dicObject students = 'xiaomingadsfasfsadf' filename='student.json' f_OK = saveTOJSON(filename,students) if f_OK: print("baocun chenggong") else: sys.exit() d_get_s=GetFromJSON(filename) if d_get_s: print(d_get_s)# 打印返回的字典对象