开发者学堂课程【Python 入门 2020年版:Json 字符串详解 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10405
Json 字符串详解
内容介绍:
一、序列化和反序列化的定义
二、实现数据的序列化和反序列化的方法
三、JSON 模块
一、序列化和反序列化的定义
通过文件操作,我们可以将字符串写入到一个本地文件。
但是,如果是一个对象(例如列表、字典、元组等),就无法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里。
序列化:设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件。
反序列化:从文件的字节序列恢复到内存中。
例如:
file = open( ' names.txt', 'w', encoding='utf8')
file.write(‘zhangsan’)
file.close()
#内容就会被写入到 names.txt 文件中
file = open( ' names.txt', 'w', encoding='utf8')
file.write(12)
file.close()
#控制台会报错,且内容就不会被写入文件中
以上会发现 file.write 写入内容时只能写字符串或者二进制,字典、列表、数字等都不能直接写入到文件里。
二、实现数据的序列化和反序列化的方法
Python 中提供了 JSON 和 pickle 两个模块用来实现数据的序列化和反序列化。
方法一是将数据转换成为字符串,repr/str 或者使用 json 模块
方法二是将数据转换成为二进制,使用 pickle 模块。
三、JSON 模块
JSON( JavaScriptObjectNotation, JS 对象简谱)是一种轻量级的数据交换格式,它基于 ECMAScript 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
JSON 的本质是字符串,区别在于 json 里要是用双引号表示字符串,如[ ' zhangsan' , 'lisi', 'jack ‘, 'tony’]
会被转换成’[ "zhangsan", "Lisi", "jack ", “tony"]'
。
import json
names = [ ' zhangsan', 'lisi' , "jack ' , "tony' ]
x = json.dumps(names )
# dumps 的作用是将数据转换成为字符串
file = open( ' names.txt ' , 'w', encoding="utf8')
file.write()
file.close()
1. JSON 序列化
json 将数据持久(序列化)有两个方法:
(1)dumps: 将数据转换成为 json 字符串,不会将数据保存到文件里。
import json
file = open( 'names.txt’ , ‘w')
names = [ " zhangsan ' , "lisi ' , "wangwu ', "jerry' , "henry ' , "merry' , 'chris']
# file.write(names) 出错,不能直接将列表写入到文件里
#可以调用 json的dumps 方法,传入一个对象参数
result = json.dumps(names)
# dumps 方法得到的结果是一个字符串
print(type(result)) #
#可以将字符串写入到文件里
file.write(result)
file.close()
(2)dump: 将数据转换成为 json 字符串的同时写入到指定文件。
import json
file = open( ' names.txt" , "w')
names = [ " zhangsan ' , 'lisi ' , 'wangwu ' , "jerry' , "henry' , 'merry' , 'chris']
# dump 方法可以接收一个文件参数,在将对象转换成为字符串的同时写入到文件里 json.dump(names,file)
file.close()
注意:
如果是一个空对象,调用 dumps 方法转换成为一个 JSON 对象,得到的结果是null ( JS 里的空对象)
json .dumps(None) # null
2.JSON 反序列化
json 反序列化也有两个方法:
(1)Loads :将 json 字符串加载成为 Python 里的数据。
x = '{ "name" : "zhangsan" , "age":18}’
#符合 json 规则的字符串
p = json.loads(x)
print(p, type(p))
print(p[ 'name ' ])
#将字符串转化为数据
(2)Load: 读取文件,把读取的内容加载成为 Python 里的数据。
file1 = open( ' names.txt' , 'r', encoding=' utf8')
y = json.load(file1)
print(y)
print(y[0])
file1.close()
json 模块:
1. 将对象转换成为字符串,不管是在哪种操作系统,哪种编程语言里,字符串都是可识别的。
2. json 就是用来在不同平台间传递数据的。
3.并不是所有的对象都可以直接转换成为一个字符串,下标列出了 Python 对象与 json 字符串的对应关系。
Python JSON
dict (字典) object(对象)
list,tuple(列表,元组) array(字符串类型)
str (字符串) string
int,float(数字类型) number
True true
False false
None null
出现以上类型之外的类型就会报错
①如果是一个自定义对象,默认无法装换成为 json 字符串,需要手动指定 JSONEncoder.
②如果是将一个 json 串重新转换成为对象,这个对象里的方法就无法使用了。