json中load 和loads 的區別

2021-10-04 19:12:02 字數 2365 閱讀 2893

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('')

2. dump 和 dumps(序列化)

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

1

2

a_dict = 

json.dump(a_dict, open('demo.json', 'w')

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

1

2

a_dict = 

a_str = json.dumps(a_dict)

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

loads: 是將string轉換為dict

dumps: 是將dict轉換為string

load: 是將裡json格式字串轉化為dict,讀取檔案

dump: 是將dict型別轉換為json格式字串,存入檔案

json高階

序列化

123

4567

89

# 使用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__))

反序列化

123

45

def dict2student(d):

return student(d['name'], d['age'], d['score'])

json_str = ''

print(json.loads(json_str, object_hook=dict2student))

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

變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在python中叫pickling

變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpickling

123

4

try:

import cpickle as pickle

except importerror:

import pickle

1.將記憶體物件訪問到磁碟

1

2

a = dict(a=1, b=2, c=3)

pickle.dumps(a) # 將物件序列化為str然後存入檔案

1

2

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中直接反序列化出物件

load 和 loads的區別

學習的東西哦隨著時間的推移也越來越多,知識是不斷積累的,但是奈何好記性不如爛筆頭,學過的東西也老是會忘,今天在檔案中讀取資料入庫的時候竟然忘了load 和 loads 的區別,分別都是用來幹什麼的用的,又翻開之前的 筆記回憶錄下,在此寫下以加深印象 具體使用方法 json.dumps 實現pytho...

json中loads的用法

python中json中的loads 和dumps 它們的作用經常弄換了,這裡記錄下,loads方法是把json物件轉化為python物件,dumps方法是把pyhon物件轉化為json物件,我是這麼理解的,先上段loas的 usr bin env python coding utf8 import...

Hibernate中get和Load比較

load支援延遲載入.它認為該資料是一定存在的,所以會使用 進行延遲載入.若資料不存在,只能拋異常.get方法,不支援延遲載入.若資料不存在就直接返回null.load方法拋異常是指在使用該物件的資料時,資料庫中不存在該資料時拋異常,而不是在建立這個物件時。在load時會先去查一下session快取...