Python3文件操作-序列化及反序列化-json模塊

目錄

1:獲取模塊幫助

2:json模塊的主要方法

3:示例代碼

3.1   dumps 和 loads

3.2   dump 和 load


json模塊提供了json格式字符串與Python中各類對象之間的轉換,最主要的就是json格式字符串與Python中字典之間的轉換。

1:獲取模塊幫助

# encoding=gbk
import json

print(json.__doc__)

print(dir(json))

for item in dir(json):
    print(item)

print('*' * 60)
#  主要的4個方法
print(help(json.dump))
print(help(json.dumps))
print(help(json.load))
print(help(json.loads))

2:json模塊的主要方法

函數 說明 獲取幫助
dump 把對象序列化爲json格式字符串,然後保存到文件 print(help(json.dump))
dumps 把對象序列化爲json格式字符串 print(help(json.dumps))
load 從文件讀取json格式字符串,然後反序列化爲Python對象 print(help(json.load))
loads 把json格式字符串,反序列化爲Python對象 print(help(json.loads))

3:示例代碼

3.1   dumps 和 loads

     Python對象與json字符串之間的轉換

# encoding=gbk
import json

print('-01--列表:---'+ '*'*60)
# 列表
v1 = [1,2,'efg',3,4,5,'abc','123']
# 列表序列化: 列表轉換爲字符串
s1 = json.dumps(v1)
print(type(s1),s1)   # <class 'str'> [1, 2, "efg", 3, 4, 5, "abc", "123"]

# 反序列化: 字符串轉換爲列表
v2 = json.loads(s1)
print(type(v2),v2)   # <class 'list'> [1, 2, 'efg', 3, 4, 5, 'abc', '123']

print('-02--元組:---'+ '*'*60)
# 元組
tup = (1,2,3,4,'abc')
s1 = json.dumps(tup)  # <class 'str'> [1, 2, 3, 4, "abc"]
print(type(s1),s1)

v2 = json.loads(s1)
print(type(v2),v2)  # <class 'list'> [1, 2, 3, 4, 'abc']

print('-03--集合:---'+ '*'*60)
# 不能是集合,序列化集合報錯。
# st = {1,2,3}
# s = json.dumps(st)
# print(type(s1),s1)

print('-04--字典:---'+ '*'*60)
dic = {123:'abc','國家':'中國'}
s1 = json.dumps(dic)  #如果你的key或者value超過了ascii的範疇,就會顯示\uxxxxx
print(type(s1),s1)   # <class 'str'> {"123": "abc", "\u56fd\u5bb6": "\u4e2d\u56fd"}

s2 = json.dumps(dic,ensure_ascii=False)
print(type(s2),s2)  #   <class 'str'> {"123": "abc", "國家": "中國"}

#
v2 = json.loads(s1)
print(type(v2),v2)  # <class 'dict'> {'123': 'abc', '國家': '中國'}

3.2   dump 和 load

        Python對象與文件中json字符串之間的轉換

# encoding=gbk
import json

print('-01--列表:---'+ '*'*60)
# 列表
v1 = [1,2,'efg',3,4,5,'abc','123']
# 列表序列化: 列表轉換爲字符串,存儲到文件中
f = open('list.txt',mode='w',encoding='utf-8')
json.dump(v1,f)
f.close()


# 反序列化: 文字中的字符串轉換爲列表
f = open('list.txt',mode='r',encoding='utf-8')
v2 = json.load(f)
print(type(v2),v2)   # <class 'list'> [1, 2, 'efg', 3, 4, 5, 'abc', '123']
f.close()

print('-02--元組:---'+ '*'*60)
# 元組
tup = (1,2,3,4,'abc')
f = open('tup.txt',mode='w',encoding='utf-8')
json.dump(tup,f)
f.close()

f = open('tup.txt',mode='r',encoding='utf-8')
v2 = json.load(f)
f.close()
print(type(v2),v2)  #  <class 'list'> [1, 2, 3, 4, 'abc']

print('-03--集合:---'+ '*'*60)
# 不能是集合,序列化集合報錯。
# st = {1,2,3}
# s = json.dumps(st)
# print(type(s1),s1)

print('-04--字典:---'+ '*'*60)
dic = {123:'abc','國家':'中國'}
f = open('dict.txt',mode='w',encoding='utf-8')
json.dump(dic,f)  #如果你的key或者value超過了ascii的範疇,就會顯示\uxxxxx
f.close()

f = open('dict2.txt',mode='w',encoding='utf-8')
json.dump(dic,f,ensure_ascii=False)  #如果你的key或者value超過了ascii的範疇,就會顯示\uxxxxx
f.close()


f = open('dict.txt',mode='r',encoding='utf-8')
v2 = json.load(f)
f.close()
print(type(v2),v2)  # <class 'dict'> {'123': 'abc', '國家': '中國'}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章