【Python】使用python中的json模塊

Json簡介:Json申尤,全名 JavaScript Object Notation滚粟,是一種輕量級的數(shù)據(jù)交換格式寻仗。最廣泛的應(yīng)用是作為AJAX中web服務(wù)器和客戶端的通訊的數(shù)據(jù)格式。

Python2.6及以上的版本可以直接import json進(jìn)行使用凡壤,不需要下載json包了署尤。
json模塊支持python的大部分內(nèi)置類型與Json進(jìn)行轉(zhuǎn)換。
json模塊提供了四個(gè)方法

dumps   #encode,將python對象轉(zhuǎn)換為json對象
loads   #decode,將json對象轉(zhuǎn)換為python對象
dump    #encode,將python對象轉(zhuǎn)換為可以存儲到文件的fp文件流
load    #decode,將fp文件流轉(zhuǎn)換為python對象

Encode過程亚侠,是把python對象轉(zhuǎn)換成json對象的一個(gè)過程曹体,常用的兩個(gè)函數(shù)是dumps和dump函數(shù)。兩個(gè)函數(shù)的唯一區(qū)別就是dump把python對象轉(zhuǎn)換成json對象生成一個(gè)fp的文件流硝烂,而dumps則是生成了一個(gè)所有程序語言都認(rèn)識的字符串箕别。
Decode過程,是把json對象轉(zhuǎn)換成python對象的一個(gè)過程滞谢,常用的兩個(gè)函數(shù)是loads和load函數(shù)串稀。區(qū)別跟dump和dumps是一樣的。
來看看他們的參數(shù)

json.dump(obj, fp, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, encoding, default, **kw)
json.dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, encoding, default, **kw)

json.load(fp, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
json.loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)

dumps接受一個(gè)python對象作為必須參數(shù)(其他參數(shù)可選)爹凹,而這個(gè)對象可以是任何python的數(shù)據(jù)類型厨诸。

data = ['username','age','others']
print type(data)
test = json.dumps(data)
print type(test)
print test
print ''
data1 = (1,2,3)
print type(data1)
test1 = json.dumps(data1)
print type(test1)
print test1
print ''
data2 = {"user":"whaike","age":24}
print type(data2)
test2 = json.dumps(data2)
print type(test2)
print test2
print ''
data3 = "what fuck ..."
print type(data3)
test3 = json.dumps(data3)
print type(test3)
print test3
print ''
data4 = None
print type(data4)
test4 = json.dumps(data4)
print type(test4)
print test4
#結(jié)果
#<type 'list'>
#<type 'str'>
#["username", "age", "others"]
#
#<type 'tuple'>
#<type 'str'>
#[1, 2, 3]
#
#<type 'dict'>
#<type 'str'>
#{"age": 24, "user": "whaike"}
#
#<type 'str'>
#<type 'str'>
#"what fuck ..."
#
#<type 'NoneType'>
#<type 'str'>
#null

其他就不列舉了镶殷,詳細(xì)如下(python -> json)


Paste_Image.png

而loads與其相反,將json編碼的字符串再轉(zhuǎn)換為python的數(shù)據(jù)結(jié)構(gòu)禾酱。詳細(xì)如下(json ->python)


Paste_Image.png

其他常用參數(shù)說明:
Skipkeys:默認(rèn)值是False,如果dict的keys內(nèi)的數(shù)據(jù)不是python的基本類型(str,unicode,int,long,float,bool,None)绘趋,設(shè)置為False時(shí)颤陶,就會(huì)報(bào)TypeError的錯(cuò)誤。此時(shí)設(shè)置成True陷遮,則會(huì)跳過這類key滓走。

ensure_ascii:默認(rèn)值True,如果dict內(nèi)含有non-ASCII的字符帽馋,則會(huì)類似\uXXXX的顯示數(shù)據(jù)搅方,設(shè)置成False后,就能正常顯示绽族。
indent:應(yīng)該是一個(gè)非負(fù)的整型姨涡,如果是0,或者為空吧慢,則一行顯示數(shù)據(jù)涛漂,否則會(huì)換行且按照indent的數(shù)量顯示前面的空白,這樣打印出來的json數(shù)據(jù)也叫pretty-printed json。
separators:分隔符匈仗,實(shí)際上是(item_separator, dict_separator)的一個(gè)元組瓢剿,默認(rèn)的就是(',',':');這表示dictionary內(nèi)keys之間用“,”隔開悠轩,而KEY和value之間用“:”隔開间狂。
encoding:默認(rèn)是UTF-8,設(shè)置json數(shù)據(jù)的編碼方式哗蜈。
sort_keys:將數(shù)據(jù)根據(jù)keys的值進(jìn)行排序前标。
部分學(xué)習(xí)代碼片段

dic1 = {'type':'dic1','username':'loleina','age':16}
json_dic1 = json.dumps(dic1)
print json_dic1
json_dic2 = json.dumps(dic1,sort_keys=True,indent =4,separators=(',', ': '),encoding="gbk",ensure_ascii=True )
print json_dic2

#結(jié)果
#{"username": "loleina", "age": 16, "type": "dic1"}
#{
#    "age": 16,
#    "type": "dic1",
#    "username": "loleina"
#}

如果把實(shí)例中的key'username'的value換成中文的“測試”,

dic1 = {'type':'dic1','username':'測試','age':16}
json_dic1 = json.dumps(dic1)
print json_dic1
json_dic2 = json.dumps(dic1,sort_keys=True,indent =4,separators=(',', ': '),encoding="utf8",ensure_ascii=False )
print json_dic2

#結(jié)果
#{"username": "\u6d4b\u8bd5", "age": 16, "type": "dic1"}
#{
#    "age": 16,
#    "type": "dic1",
#    "username": "測試"
#}
 # dump功能
 # 將數(shù)據(jù)通過特殊的形式轉(zhuǎn)換為所有程序語言都認(rèn)識的字符串,并寫入文件
 with open('D:/tmp.json', 'w') as f:
     json.dump(data, f)
 # load功能
 # 從數(shù)據(jù)文件中讀取數(shù)據(jù),并將json編碼的字符串轉(zhuǎn)換為python的數(shù)據(jù)結(jié)構(gòu)
 with open('D:/tmp.json', 'r') as f:
     data = json.load(f)

參考如下距潘,侵刪
python對json的操作總結(jié)
python---Json
官網(wǎng)json— JSON encoder and decode

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炼列,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子音比,更是在濱河造成了極大的恐慌俭尖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洞翩,死亡現(xiàn)場離奇詭異稽犁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)骚亿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門已亥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人来屠,你說我怎么就攤上這事虑椎。” “怎么了俱笛?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵捆姜,是天一觀的道長。 經(jīng)常有香客問我迎膜,道長泥技,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任磕仅,我火速辦了婚禮珊豹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榕订。我一直安慰自己店茶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布卸亮。 她就那樣靜靜地躺著忽妒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上段直,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天吃溅,我揣著相機(jī)與錄音,去河邊找鬼鸯檬。 笑死决侈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的喧务。 我是一名探鬼主播赖歌,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼功茴!你這毒婦竟也來了庐冯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤坎穿,失蹤者是張志新(化名)和其女友劉穎展父,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玲昧,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栖茉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了孵延。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吕漂。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖尘应,靈堂內(nèi)的尸體忽然破棺而出惶凝,到底是詐尸還是另有隱情,我是刑警寧澤菩收,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布梨睁,位于F島的核電站鲸睛,受9級特大地震影響娜饵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜官辈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一箱舞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拳亿,春花似錦晴股、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春寂呛,著一層夾襖步出監(jiān)牢的瞬間怎诫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工贷痪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幻妓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓劫拢,卻偏偏與公主長得像肉津,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子舱沧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 目的: 將 Python 對象編碼為 JSON 字符串妹沙,并將 JSON 字符串解碼為 Python 對象。 jso...
    yongxinz閱讀 910評論 3 15
  • 常用模塊 認(rèn)識模塊 什么是模塊 什么是模塊? 常見的場景:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件分俯,文...
    go以恒閱讀 1,947評論 0 6
  • 1. 認(rèn)識模塊 1.1 什么是模塊 一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件肾筐,文件名就是模塊名字加上.p...
    hswangxun閱讀 614評論 0 1
  • 一、json模塊 在Python中json是一個(gè)非常常用的模塊缸剪,這個(gè)主要有4個(gè)方法: 1吗铐、json.dumps 2...
    酷颯de小姐姐閱讀 784評論 0 3
  • 一 序列化模塊 什么叫序列化——將原本的字典、列表等內(nèi)容轉(zhuǎn)換成一個(gè)字符串的過程就叫做序列化杏节。 比如唬渗,我們在pyth...
    100斤的瘦子_湯勇閱讀 930評論 0 0