python基礎之JSON標準庫

2021-09-10 03:22:22 字數 4726 閱讀 1650

我們平常使用的python物件所進行的操作是在記憶體中,當程式關閉就會被清空,所以我們需要用一種合適的方法將這些資料儲存下來。

為了將我們的資料進行永久儲存,需要引入序列化(pickling/serialization)的概念。

序列化的定義:將複雜的python資料結果轉換成乙個二進位制資料集合(資料流)。反序列化:從資料流(字串形式)重新構造複雜的python資料結構。

序列化的好處:我們可以通過網路或本地儲存介質講這些資料流儲存或傳輸。

序列化的方法:引入json、pickling、marshal、shelve,其中最常用的是json

2.1 基本用法

json模組的序列化和反序列化方法分別是dumps和loads,json.dumps()和json.dump()將乙個python物件轉換成json串,json.loads()和json.load()將乙個json串還原成python物件。

json.dump()和json.dumps()的區別

json.dump()處理的是檔案物件,而json.dumps()處理的是字串物件。

json.load()和json.loads()的區別

json.load()處理的是檔案物件,而json.loads()處理的是字串物件。

2.2 json.dumps()

將python的資料型別轉換成json字串

語法格式:json.dumps(obj, skipkeys=false, ensure_ascii=true, check_circular=true, allow_nan=true, cls=none, indent=none, separators=none, encoding="utf-8", default=none, sort_keys=false, **kw)

>>

>

import json

>>

> json.dumps(

)''>>

> json.dumps(

"string"

)'"string"'

>>

> json.dumps(1)

'1'>>

> json.dumps(

)''

使用引數能讓json字串格式化輸出:

>>

>

print json.dumps(

, sort_keys=

true

, indent=

4, separators=

(','

,': '))

較重要的引數:

sort_keys:是否排序

indent:定義縮排大小

separators:是乙個元組,定義分隔符的型別

skipkeys:是否允許json字串編碼字典物件時,字典的key不是字串型別(預設是不允許)

a =

['foo',]

s = json.dumps(a, sort_keys=

true

, indent=

4, separators=

('!'

,'?'))

#分隔符這裡只是測試,一般保持預設逗號和分號即可

print s

result:

["foo"!

]

try

: data =

json.dumps(data)

except typeerror,e:

print e #keys must be a string

print json.dumps(data,skipkeys=

true)#

data =

print json.dumps(data)

result:

keys must be a string

python原始型別向json型別的轉化對照表

python

json

dict

object

list,tuple

array

str,unicode

string

int,long,float

number

true

true

false

false

none

null

2.3 json.loads()

將json字串轉換成python的資料型別。也就是反序列化。

語法格式:json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

json.loads('')

json字串轉換成python物件型別對照表

json

python

object

dict

array

list

string

unicode

number(int)

intnumber(real)

float

true

true

false

false

null

2.4 json.dump()

將序列化之後形成的json字串儲存到檔案。

語法格式:dump(obj, fp, skipkeys=false, ensure_ascii=true, check_circular=true, allow_nan=true, cls=none, indent=none, separators=none, default=none, sort_keys=false, **kw):

#encoding:utf-8

import json

a=#第一種方法將json字串寫入檔案中

#該方法不需要close

with

open

("json.txt"

,"a"

)as f:

f.write(json.dumps(a,indent=4)

)#第二種方法將json字串寫入檔案中

f=open

("json.txt"

,"a"

)json.dump(a,f,indent=4)

f.close(

)#json.txt

2.5 json.load()

從檔案接受json字串,並反序列化成為python的資料型別。

語法格式:load(fp, cls=none, object_hook=none, parse_float=none, parse_int=none, parse_constant=none, object_pairs_hook=none, **kw)

#encoding:utf-8

import json

a=#第一種方法將json字串寫入檔案中

#該方法不需要close

with

open

("json"

,"a"

)as f:

f.write(json.dumps(a)

)#第一種方法將檔案中的json字串轉反序列化成python的資料型別

with

open

("json"

,"r"

)as f:

print json.loads(f.read())

#json

python的json想辦法能將各種資料物件都轉換為json,其中可選引數default就是用來提供給使用者自行定義轉換函式的

class

student

(object):

def__init__

(self,name,***,age)

: self.name=name

self.***=***

self.age=age

tyson=student(

"tyson"

,"boy",21

)print json.dumps(tyson,default=

lambda obj:obj.__dict__)

#python的json想辦法能將各種資料物件都轉換為json,其中可選引數default就是用來提供給使用者自行定義轉換函式的

#所以上面的方法與下面這個是等同的

defstuclass2json

(classobject)

:return

print json.dumps(tyson,default=stuclass2json)

一般不會遇到這種情況,待新增

標準庫之JSON物件

json格式 每個json物件就是乙個值,可能是乙個陣列或物件,也可能是乙個原始型別的值,只能是乙個值,不能是兩個或更多的值.json 對值的型別和格式有嚴格的規定 復合型別的值只能是陣列或者物件,不能是函式 正規表示式物件 日期物件.原始型別的值只有四種 字串 數值 十進位制 布林值和null,不...

Python常用標準庫 json

json是一種輕量級資料交換格式,一般api返回的資料大多是json xml,如果返回json的話,將獲取的資料轉換成字典,方面在程式中處理。json庫經常用的有兩種方法dumps和loads 將字典轉換為json字串 dict type dict json str json.dumps dict ...

Python序列化之Json基礎

python的序列化就是將python的基本物件轉換為字串的過程,反之則是反序列化。序列化型別 import json import pickle 序列化定義 序列化 物件 列表 字典都是python的基本資料型別,序列化其實就是把這些資料型別轉換為字串。反序列化 將序列化後得到的字串轉反序列化成p...