關於 Python json中load和loads區別

一、相同點

  • dump dumps 都實現瞭序列化
  • load loads 都實現反序列化

變量從內存中變成可存儲或傳輸的過程稱之為序列化序列化是將對象狀態轉化為可保存或可傳輸格式的過程。

變量內容從序列化的對象重新讀到內存裡稱之為反序列化反序列化是流轉換為對象。

二、區別

1.load 和 loads (反序列化)

load:針對文件句柄,將json格式的字符轉換為dict,從文件中讀取 (將string轉換為dict)

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


loads:針對內存對象,將string轉換為dict (將string轉換為dict)

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

2.dump 和 dumps(序列化)

dump:將dict類型轉換為json字符串格式,寫入到文件 (易存儲)

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


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

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.序列化

# 使用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.反序列化

#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
try:
    import cPickle as pickle
except ImportError:
    import pickle

1.將內存對象存取到磁盤

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.從磁盤讀取到內存對象

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

到此這篇關於關於 Python json中load和loads區別的文章就介紹到這瞭,更多相關 Python json中load和loads區別內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: