Python中的JSON數(shù)據(jù)處理

我們?cè)谧鼋涌跍y(cè)試的時(shí)候测柠,接觸最多的數(shù)據(jù)格式應(yīng)當(dāng)是JSON格式了悠就。我們先看下JSON的定義:

JSON: JavaScript Object Notation(JavaScript 對(duì)象表示法)
JSON 是存儲(chǔ)和交換文本信息的語(yǔ)法错邦。類似 XML。
JSON 比 XML 更小、更快锦积,更易解析。

我們看一個(gè)簡(jiǎn)單的例子:

{
    "sites": [
        {
            "name": "Nemo",
            "url": "http://www.reibang.com/u/ea364f9b9048"
        },
        {
            "name": "google",
            "url": "www.google.com"
        }
    ]
}

看了這個(gè)例子歉嗓,有的人會(huì)說(shuō)丰介,這不就是Python里面的字典么?既然是字典鉴分,為什么還需要轉(zhuǎn)換哮幢?

其實(shí)這只是看起來(lái),實(shí)際上是有很大差異的志珍,JSON里面的數(shù)據(jù)類型和Python里面的數(shù)據(jù)類型是不一樣的橙垢;
比如Python里面的字典,JSON里面是對(duì)象伦糯;Python里面的字符串是str柜某,而JSON里面是string;Python里面的空值是None敛纲,JSON里面的空值是null喂击。

這是一個(gè)Python中的列表,元素只有一個(gè)字典:

[{
    'a': 1,
    'b': 2,
    'c': 3,
    'd': True,
    'e': False,
    'f': None
}]

我們可以通過(guò)一些在線的JSON校驗(yàn)格式化工具看看這是不是一個(gè)JSON數(shù)據(jù)载慈。試一試惭等!

我們看一下結(jié)果:

JSON校驗(yàn)結(jié)果

注意,要想得到圖中的效果办铡,記得點(diǎn) “ 新版 ”辞做。

從上面的圖片中琳要,我們可以看出JSON格式中單引號(hào)是不被識(shí)別的,另外True秤茅、False稚补、None也是不能被識(shí)別的。

由于這些差異的存在框喳,如果不轉(zhuǎn)換直接使用把Python里面的字典當(dāng)成JSON使用课幕,或者直接拿獲取到的JSON數(shù)據(jù)當(dāng)成字典用,都會(huì)出錯(cuò)五垮。

Python與JSON數(shù)據(jù)類型對(duì)應(yīng)表:
Python JSON 說(shuō)明
dict object 字典
list, tuple array 序列
str string 字符串
int, float number 數(shù)字類型
True true 布爾值True
False false 布爾值 False
None null 空值

既然知道了為什么要轉(zhuǎn)換乍惊,就來(lái)了解怎么轉(zhuǎn)換,這就需要用到Python的內(nèi)置模塊json放仗,內(nèi)置模塊润绎,在代碼中直接引用即可:

import json

json模塊中主要用到的就4個(gè)函數(shù):

json.dumps(): 將Python數(shù)據(jù)編碼(轉(zhuǎn)換)為JSON數(shù)據(jù);
json.loads(): 將JSON數(shù)據(jù)轉(zhuǎn)換(解碼)為Python數(shù)據(jù);
json.dump(): 將Python數(shù)據(jù)編碼并寫入JSON文件诞挨;
json.load(): 從JSON文件中讀取數(shù)據(jù)并解碼莉撇。

接下來(lái)我們看下這些函數(shù)怎么使用:

#!/usr/bin/python3
import json

data = [{
    'a': 1,
    'b': 2,
    'c': 3,
    'd': True,    #注意觀察,在python的字典中
    'e': False,   # True和False首字母是大寫的
    'f': None    # 空值是None
}]   

json_data = json.dumps(data)
print(json_data)

輸出結(jié)果:

[{"a": 1, "b": 2, "c": 3, "d": true, "e": false, "f": null}]

注意觀察上面的結(jié)果:

單引號(hào)變成了雙引號(hào)(用JSON數(shù)據(jù)的時(shí)候雙引號(hào)才是標(biāo)準(zhǔn)的)惶傻;
首字母大寫的TrueFalse變成了全小寫true棍郎、false
空值由None變成了null银室。

我們還是用剛才生成的JS格式數(shù)據(jù)來(lái)練習(xí):

#!/usr/bin/python3
import json

jsonData = '''[
   {
       "a": 1,
       "b": 2,
       "c": 3,
       "d": true,
       "e": false,
       "f": null
   }
]'''
data = json.loads(jsonData)
print(data)

輸出結(jié)果:

[{'a': 1, 'b': 2, 'c': 3, 'd': True, 'e': False, 'f': None}]

可以看出結(jié)果變成了Python能使用的數(shù)據(jù)涂佃。

剩下的json.dump()和json.load()用來(lái)處理JSON文件的:

#!/usr/bin/python3
import json

data = [{
    'a': 1,
    'b': 2,
    'c': 3,
    'd': True,    
    'e': False,  
    'f': None 
}]   

# 寫入 JSON 數(shù)據(jù)
with open('data.json', 'w') as f:    #在代碼當(dāng)前目錄生成一個(gè)data.json的文件
     json.dump(data, f)      

# 讀取數(shù)據(jù)
with open('data.json', 'r') as f:   #讀取當(dāng)前目錄的json文件并解碼成python數(shù)據(jù)
     data = json.load(f)
     print(data)

如果覺(jué)得生成的JSON文件中格式不好看,可以把文件內(nèi)容拷貝到在剛才的線校驗(yàn)工具左邊欄中并雙擊蜈敢!

格式化前
格式化后

把格式化之后的拷到文件中覆蓋即可巡李。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市扶认,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌殊橙,老刑警劉巖辐宾,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異膨蛮,居然都是意外死亡叠纹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門敞葛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)誉察,“玉大人,你說(shuō)我怎么就攤上這事惹谐〕制” “怎么了驼卖?”我有些...
    開(kāi)封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鸿秆。 經(jīng)常有香客問(wèn)我酌畜,道長(zhǎng),這世上最難降的妖魔是什么卿叽? 我笑而不...
    開(kāi)封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任桥胞,我火速辦了婚禮,結(jié)果婚禮上考婴,老公的妹妹穿的比我還像新娘贩虾。我一直安慰自己,他們只是感情好沥阱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布缎罢。 她就那樣靜靜地躺著,像睡著了一般喳钟。 火紅的嫁衣襯著肌膚如雪屁使。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天奔则,我揣著相機(jī)與錄音蛮寂,去河邊找鬼。 笑死易茬,一個(gè)胖子當(dāng)著我的面吹牛酬蹋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抽莱,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼范抓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了食铐?” 一聲冷哼從身側(cè)響起匕垫,我...
    開(kāi)封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虐呻,沒(méi)想到半個(gè)月后象泵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斟叼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年偶惠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朗涩。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忽孽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兄一,我是刑警寧澤厘线,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站瘾腰,受9級(jí)特大地震影響皆的,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蹋盆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一费薄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栖雾,春花似錦楞抡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至账胧,卻和暖如春竞慢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背治泥。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工筹煮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人居夹。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓败潦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親准脂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子劫扒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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