關于 Python json中l(wèi)oad和loads區(qū)別
一、相同點
dump
和dumps
都實現了序列化load
和loads
都實現反序列化
變量從內存中變成可存儲或傳輸的過程稱之為序列化序列化是將對象狀態(tài)轉化為可保存或可傳輸格式的過程。
變量內容從序列化的對象重新讀到內存里稱之為反序列化反序列化是流轉換為對象。
二、區(qū)別
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
提供兩個模塊來實現序列化:cPickle
和pickle
。這兩個模塊功能是一樣的,區(qū)別在于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
中l(wèi)oad和loads區(qū)別的文章就介紹到這了,更多相關 Python json中l(wèi)oad和loads區(qū)別內容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯系alex-e#qq.com處理。