1. 程式人生 > 其它 >Python json中load和loads區別

Python json中load和loads區別

摘抄筆記

這篇文章主要介紹了關於 Python json中load和loads區別,文章也有簡單的說明它們之間的相同點,然後詳細介紹不同點,需要的朋友可以參考一下文章的具體內容  一、相同點
  • dump 和 dumps 都實現了序列化
  • load 和 loads 都實現反序列化

變數從記憶體中變成可儲存或傳輸的過程稱之為序列化序列化是將物件狀態轉化為可儲存或可傳輸格式的過程。

變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化反序列化是流轉換為物件。

二、區別

1.load 和 loads (反序列化)

load:針對檔案控制代碼,將json格式的字元轉換為dict,從檔案中讀取 (將string

轉換為dict)

1 a_json = json.load(open('demo.json','r'))

loads:針對記憶體物件,將string轉換為dict (將string轉換為dict)

1 a = json.loads('{'a':'1111','b':'2222'}')

2.dump 和 dumps(序列化)

dump:將dict型別轉換為json字串格式,寫入到檔案 (易儲存)

1 2 a_dict = {'a':'1111','b':'2222'} json.dump(a_dict, open
('demo.json', 'w')

dumps:將dict轉換為string (易傳輸)

1 2 a_dict = {'a':'1111','b':'2222'} a_str = json.dumps(a_dict)

總結:

根據序列化和反序列的特性

  • loads: 是將string轉換為dict
  • dumps: 是將dict轉換為string
  • load: 是將裡json格式字串轉化為dict,讀取檔案
  • dump: 是將dict型別轉換為json格式字串,存入檔案

三、JSON進階

1.序列化

1 2 3 4 5 6 7 8 9 # 使用class物件的__dict__方法 class Student(object):     def __init__(self, name, age, score):         self.name = name         self.age = age         self.score = score import json s = Student('Bob', 20, 88) print(json.dumps(s, default=lambda obj: obj.__dict__))

2.反序列化

1 2 3 4 5 6 7 #Python學習交流群:531509025   def dict2student(d):     return Student(d['name'], d['age'], d['score'])   json_str = '{"age": 20, "score": 88, "name": "Bob"}' print(json.loads(json_str, object_hook=dict2student))

四、python中的序列化和反序列化

Python提供兩個模組來實現序列化:cPicklepickle。這兩個模組功能是一樣的,區別在於cPickle是C語言寫的,速度快,pickle是純Python寫的,速度慢。

  • 變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling
  • 變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpickling
1 2 3 4 try:     import cPickle as pickle except ImportError:     import pickle

1.將記憶體物件存取到磁碟

1 2 3 4 5 a = dict(a=1, b=2, c=3) pickle.dumps(a)     # 將物件序列化為str然後存入檔案   a = dict(a=1, b=2, c=3) pickle.dump(a, open('a.txt', 'wb')) # 使用dump直接把物件序列化為file-like Object,注意是二進位制儲存

2.從磁碟讀取到記憶體物件

1 pickle.load(open('a.txt', 'rb'))    #從file-like Object中直接反序列化出物件