用Python解析json數(shù)據(jù)

json 模塊

jsonJavaScript程序編寫(xiě)數(shù)據(jù)結(jié)構(gòu)的原生方式踱启,在Python中捆蜀,字典的格式和json格式在顯示上是一樣的钠四,但是字典是dict,而json是str纱昧。那么如何將一個(gè)字符串類型的dictlist轉(zhuǎn)換成實(shí)實(shí)在在的dictlist呢刨啸,請(qǐng)往下看。

>>> import json

Python的json模塊主要包含兩大函數(shù)识脆。

  1. json.dumps把一個(gè)Python對(duì)象編碼轉(zhuǎn)換成json字符串
  2. json.loadsjson格式字符串解碼轉(zhuǎn)換成Python對(duì)象

其中json有下面三種樣式(姑且稱之為樣式 v

  1. 字典樣式 '{"name":"gzj", "age":"23", "sex":"man"}'
  2. 列表樣式 '["gzj", 23, "man"]'
  3. 字典和列表相互嵌套的樣式 """["gzj", "{'age':'23'}"]"""
    特別注意JSON字符串中的內(nèi)容用雙引號(hào)设联,而非單引號(hào)。若存在嵌套的情況灼捂,則最外層用""" 中間的內(nèi)容 """表示离例。

下面以第二種情況舉例如下,在交互式環(huán)境中輸入以下代碼:

>>> stringOfJsonData = "[[1, 2, 3, 'abcd'], [2, 3, 4, 'def']]"
>>> json.loads(stringOfJsonData)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Anaconda3\lib\json\__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "C:\Anaconda3\lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Anaconda3\lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 12 (char 11)

問(wèn)題在于JSON字符串中的內(nèi)容應(yīng)該用雙引號(hào)悉稠,而非單引號(hào)宫蛆。
重新修改后,在交互式環(huán)境中輸入以下代碼:

>>> stringOfJsonData = '[[1, 2, 3, "abcd"], [2, 3, 4, "def"]]'
>>> jsonDataAsPythonValue = json.loads(stringOfJsonData)
>>> jsonDataAsPythonValue
[[1, 2, 3, 'abcd'], [2, 3, 4, 'def']]
>>> type(jsonDataAsPythonValue)
<class 'list'>

逆過(guò)程如下:

>>> pythonValue = [[1, 2, 3, 'abcd'], [2, 3, 4, 'def']]
>>> stringOfJsonData = json.dumps(pythonValue)
>>> stringOfJsonData
'[[1, 2, 3, "abcd"], [2, 3, 4, "def"]]'
>>> type(stringOfJsonData)
<class 'str'>

實(shí)例:下載json數(shù)據(jù)并解析

爬取深交所的上市公司公告http://disclosure.szse.cn/m/drgg.htm的猛,通過(guò)分析耀盗,找到公告列表的“應(yīng)用程序編程接口(API)”,即請(qǐng)求http://disclosure.szse.cn//disclosure/fulltext/plate/szlatest_24h.js這個(gè)URL就可以獲得想要的數(shù)據(jù)卦尊,這個(gè)頁(yè)面提供就是 json 數(shù)據(jù)叛拷。如圖1所示。

圖1

稍微有一點(diǎn)瑕疵的是我紅色圓圈標(biāo)記的地方岂却,那是 js 定義數(shù)組忿薇,我們將網(wǎng)頁(yè)中的文字拷貝到pycharm編輯器中裙椭,去掉var三個(gè)字母,然后格式化顯示(ctrl+alt+\)煌恢,如圖2和圖3所示骇陈。

圖2

……

圖3

這樣我們就能很清楚看到這就是Python中的list。

import json
import requests

res = requests.get('http://disclosure.szse.cn//disclosure/fulltext/plate/szlatest_24h.js')
res.encoding = 'gbk'  # 得到的結(jié)果轉(zhuǎn)換為 gbk 編碼
all_news = json.loads(res.text[17:-2])  # 從第一個(gè)'['取到最后一個(gè)']'瑰抵,可以先將res.text打印出來(lái),查看里面的元素情況器联,以此來(lái)確定取的位置

# 遍歷由json數(shù)據(jù)得到的list
for each_news in all_news:
    url = each_news[1]  # 獲取公告的URL
    title = each_news[2]  # 獲取公告的標(biāo)題
    time = each_news[-1]  # 獲取公告發(fā)布的時(shí)間
    print(url,title,time)


該文章于2017年7月26日于CSDN上首次發(fā)表二汛,2017年12月24日搬家至此!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拨拓,一起剝皮案震驚了整個(gè)濱河市肴颊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渣磷,老刑警劉巖婿着,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異醋界,居然都是意外死亡竟宋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)形纺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丘侠,“玉大人,你說(shuō)我怎么就攤上這事逐样∥献郑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵脂新,是天一觀的道長(zhǎng)挪捕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)争便,這世上最難降的妖魔是什么级零? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮始花,結(jié)果婚禮上妄讯,老公的妹妹穿的比我還像新娘。我一直安慰自己酷宵,他們只是感情好亥贸,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著浇垦,像睡著了一般炕置。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天朴摊,我揣著相機(jī)與錄音默垄,去河邊找鬼。 笑死甚纲,一個(gè)胖子當(dāng)著我的面吹牛口锭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播介杆,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鹃操,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了春哨?” 一聲冷哼從身側(cè)響起荆隘,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赴背,沒(méi)想到半個(gè)月后椰拒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凰荚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年燃观,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浇揩。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仪壮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胳徽,到底是詐尸還是另有隱情积锅,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布养盗,位于F島的核電站缚陷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏往核。R本人自食惡果不足惜箫爷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聂儒。 院中可真熱鬧虎锚,春花似錦、人聲如沸衩婚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)非春。三九已至柱徙,卻和暖如春缓屠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背护侮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工敌完, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人羊初。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓滨溉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凳忙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子业踏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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

  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫(xiě)完項(xiàng)目接著寫(xiě)寫(xiě)一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,582評(píng)論 1 118
  • 本節(jié)要介紹的是Python里面常用的幾種數(shù)據(jù)結(jié)構(gòu)热幔。通常情況下乐设,聲明一個(gè)變量只保存一個(gè)值是遠(yuǎn)遠(yuǎn)不夠的,我們需要將一組...
    小黑y99閱讀 65,198評(píng)論 0 9
  • 一绎巨、字典基本操作 基本語(yǔ)法:dict = {'ob1':'computer', 'ob2':'mouse', 'o...
    古佛青燈度流年閱讀 2,646評(píng)論 0 1
  • 一近尚、基礎(chǔ)小知識(shí) 1、Python是一種腳本語(yǔ)言场勤,源文件通常以.py作為擴(kuò)展名戈锻,其運(yùn)行方式與java類似,都是編譯成...
    C神2016閱讀 1,576評(píng)論 0 1
  • 率文和媳,好帥格遭。 隨便說(shuō),隨意寫(xiě)留瞳。 無(wú)拘無(wú)束拒迅,展現(xiàn)自我。 內(nèi)容豐富多她倘,大家言語(yǔ)棒璧微。 各種評(píng)論指導(dǎo),邊看邊學(xué)真好硬梁。 沒(méi)有...
    伊薩閱讀 300評(píng)論 10 10