日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python json序列化对象_Python学习之json序列化

發(fā)布時(shí)間:2024/7/5 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python json序列化对象_Python学习之json序列化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、什么是序列化

在我們存儲(chǔ)數(shù)據(jù)或者網(wǎng)絡(luò)傳輸數(shù)據(jù)的時(shí)候,需要對(duì)我們的對(duì)象進(jìn)行處理,把對(duì)象處理成方便存儲(chǔ)和傳輸?shù)臄?shù)據(jù)格式。這個(gè)過(guò)程叫序列化,不同的序列化結(jié)果也不同,但目的是一樣的,都是為了存儲(chǔ)和傳輸

在Python中三種序列化的方案:

pickle,可以將我們Python中任意數(shù)據(jù)類型轉(zhuǎn)化為bytes并寫(xiě)入到文件中。同樣也可以把文件中寫(xiě)好的bytes轉(zhuǎn)換回到我們Python的數(shù)據(jù)-這個(gè)過(guò)程被稱為反序列化。

shelve簡(jiǎn)單另類的一種序列化方案。有點(diǎn)類似于Redis,可以作為一種小型的數(shù)據(jù)庫(kù)來(lái)使用。

json,將Python中常見(jiàn)的字典,列表轉(zhuǎn)化成字符串,是目前前后端數(shù)據(jù)交互使用頻率最高的一種數(shù)據(jù)模式。

二、json

1.什么是json

json是前后端交互的樞紐,相當(dāng)于編程界的普通話,前后端用Python溝通。因?yàn)閖son的語(yǔ)法格式可以完美的表示出一個(gè)對(duì)象。那么什么是json:json全稱JavaScript object notation,即js對(duì)象簡(jiǎn)譜,例如下面代碼示例:

{

"id": 1,

"title": "Python從入門(mén)到放棄(第二版)",

"pub_date": "2018-01-11",

"category": "Python",

"publisher": {

"id": 1,

"name": "北京出版社"

},

"post_authors": [

{

"id": 2,

"name": "佚名"

}

]

}

這段形如Python字典的東西在JavaScript里面叫json,其實(shí)是一樣的。我們發(fā)現(xiàn)用這樣的數(shù)據(jù)結(jié)構(gòu)可以完美的表示出任何對(duì)象,并且可以完整的把對(duì)象表示出來(lái)。只要代碼格式比較好,那么可讀性也挺強(qiáng)的,所以大家公認(rèn)用這樣一種數(shù)據(jù)結(jié)構(gòu)作為數(shù)據(jù)交互的格式。

在json之前,通常用的數(shù)據(jù)結(jié)構(gòu)為XML,形如:

Python從入門(mén)到放棄(第二版)

2018-01-11

Python

1

北京出版社

總之,XML格式的文件在維護(hù)和處理上相比json文件很難解析,所以后來(lái)大都傾向于使用json這一數(shù)據(jù)結(jié)構(gòu)了。

2.json在Python中的用法

字典 -> json

要先引入json模塊,再進(jìn)行處理

import json

dic = {"姓名": "程序猿", "年齡": 28, "頭發(fā)": None}

s = json.dumps(dic)

print(s)

# 輸出:

>>>{"\u59d3\u540d": "\u7a0b\u5e8f\u733f", "\u5e74\u9f84": 28, "\u5934\u53d1": null}

結(jié)果很不友好啊. 那如何處理成中?呢? 在dumps的時(shí)候給出另一個(gè)參數(shù)ensure_ascii=False就可以了了。

import json

dic = {"姓名": "程序猿", "年齡": 28, "頭發(fā)": None}

s = json.dumps(dic, ensure_ascii=False)

print(s)

# 輸出:

>>>{"姓名": "程序猿", "年齡": 28, "頭發(fā)": null}

json -> 字典

上面介紹的是如何把字典格式的數(shù)據(jù)轉(zhuǎn)化為json,那么怎么把前端傳遞過(guò)來(lái)的json文件轉(zhuǎn)化為字典格式呢:

import json

s = '{"姓名": "程序猿", "年齡": 28, "頭發(fā)": null}'

# 注意此處要加引號(hào),表示s為字符串-the JSON object must be str

dic = json.loads(s)

print(dic)

print(type(dic))

# 輸出:

>>> {'姓名': '程序猿', '年齡': 28, '頭發(fā)': None}

>>>

寫(xiě)入/讀取json文件

json也可以像pickle一樣把序列化的結(jié)果寫(xiě)入到文件中:

import json

dic = {"姓名": "程序猿", "年齡": 28, "頭發(fā)": None}

f = open('test.json', mode='w', encoding="utf-8")

# 把對(duì)象打散成json寫(xiě)入到文件中

json.dump(dic, f, ensure_ascii=False)

f.close()

test.json中顯示:

{

"姓名": "程序猿",

"年齡": 28,

"頭發(fā)": null

}

同樣也可以從文件中讀取一個(gè)json:

import json

f = open('test.json', mode='r', encoding="utf-8")

dic = json.load(f)

f.close()

print(dic)

# 輸出:

>>> {'姓名': '程序猿', '年齡': 28, '頭發(fā)': None}

注意: 我們可以向同一個(gè)文件中寫(xiě)入多個(gè)json串,但是讀不行

import json

lst = [

{"a": 1},

{'b': 2},

{'c': 3}

]

f = open("test.json", mode="w", encoding="utf-8")

for dic in lst:

json.dump(dic, f)

f.close()

test.json中顯示:

可以看到此時(shí)文件中的內(nèi)容是一行的,所以會(huì)有紅色下劃線顯示報(bào)錯(cuò)信息,這在讀取的時(shí)候是無(wú)法正常讀取的。如何解決讀取問(wèn)題呢?兩種方案。

方案一:

把所有的內(nèi)容準(zhǔn)備好統(tǒng)一進(jìn)行寫(xiě)入和讀取,但是這樣處理,如果數(shù)據(jù)量小還好,數(shù)據(jù)量大的話就很麻煩了。

方案二:

不用dump方法,改用dumps和loads,對(duì)每一行分別進(jìn)行處理。

import json

lst = [

{"a": 1},

{'b': 2},

{'c': 3}

]

# 寫(xiě)入

f = open("test.json", mode="w", encoding="utf-8")

for dic in lst:

s = json.dumps(dic, ensure_ascii=True) + '\n'

f.write(s)

f.close()

# 讀取

f = open("test.json", mode='r', encoding='utf-8')

for line in f:

d = json.loads(line.strip())

print(d)

f.close()

打印結(jié)果為:

{'a': 1}

{'b': 2}

{'c': 3}

這樣的話就能正常讀取了!

總結(jié)

以上是生活随笔為你收集整理的python json序列化对象_Python学习之json序列化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。