使用jsonpath解析json

使用jsonpath,可以大大減少開(kāi)發(fā)量蹦疑。

為了能像寫(xiě)XPath一樣寫(xiě)json路徑,Stefan Goessner開(kāi)發(fā)了jsonpath(https://goessner.net/articles/JsonPath/)萨驶。

jsonpath也有Python實(shí)現(xiàn)(https://github.com/kennknowles/python-jsonpath-rw)歉摧。

安裝方式:pip install jsonpath-rw

簡(jiǎn)單使用:

from jsonpath_rw import jsonpath, parse

jsonpath_expr = parse('foo[*].baz')
print(jsonpath_expr)

print([match.value for match in jsonpath_expr.find({'foo': [{'baz': 1}, {'baz': 2}]})])

print([str(match.full_path) for match in jsonpath_expr.find({'foo': [{'baz': 1}, {'baz': 2}]})])

jsonpath.auto_id_field = 'id'
print([match.value for match in parse('foo[*].id').find({'foo': [{'id': 'bizzle'}, {'baz': 3}]})])

print([match.value for match in parse('a.*.b.`parent`.c').find({'a': {'x': {'b': 1, 'c': 'number one'}, 'y': {'b': 2, 'c': 'number two'}}})])

另一個(gè)例子腔呜,獲取所有author字段:

dict = { "store": {
    "book": [
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      { "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

from jsonpath_rw import parse

jsonpath_expr = parse('$..author')

res = jsonpath_expr.find(dict)

print([match.value for match in res])

對(duì)36氪的快訊接口解析叁温,只要知道最終要取的字段名就好,不用寫(xiě)完整的字典取值核畴,可以省不少事:

import requests
import json
from jsonpath_rw import parse


header = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    }

url = 'https://36kr.com/api/newsflash?&per_page=20'
response = requests.get(url,
                        headers=header,
                        timeout=5
                        )

dict = json.loads(response.text)

jsonpath_expr = parse('$..title, description, published_at')

res = jsonpath_expr.find(dict)

print([match.value for match in res])

jsonpath的詳細(xì)語(yǔ)法可參考:
https://github.com/kennknowles/python-jsonpath-rw

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膝但,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谤草,更是在濱河造成了極大的恐慌跟束,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丑孩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡温学,警方通過(guò)查閱死者的電腦和手機(jī)略贮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)仗岖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)刨肃,“玉大人,你說(shuō)我怎么就攤上這事箩帚』苹荆” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵桅打,是天一觀的道長(zhǎng)是嗜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)挺尾,這世上最難降的妖魔是什么鹅搪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任遭铺,我火速辦了婚禮恢准,結(jié)果婚禮上甫题,老公的妹妹穿的比我還像新娘。我一直安慰自己坠非,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布盟迟。 她就那樣靜靜地躺著潦闲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矫钓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天赵辕,我揣著相機(jī)與錄音概龄,去河邊找鬼。 笑死私杜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锣光。 我是一名探鬼主播铝耻,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓢捉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起搂漠,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤某弦,失蹤者是張志新(化名)和其女友劉穎而克,沒(méi)想到半個(gè)月后惊科,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡充活,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蜡娶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幕随。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宿接,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出睦霎,到底是詐尸還是另有隱情,我是刑警寧澤蛤高,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布碑幅,位于F島的核電站,受9級(jí)特大地震影響沟涨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裹赴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一篮昧、第九天 我趴在偏房一處隱蔽的房頂上張望笋妥。 院中可真熱鬧,春花似錦春宣、人聲如沸嫉你。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)簿姨。三九已至,卻和暖如春准潭,著一層夾襖步出監(jiān)牢的瞬間域仇,已是汗流浹背刑然。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工泼掠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垦细,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓蝠检,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親饲梭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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

  • JsonPath是一種簡(jiǎn)單的方法來(lái)提取給定JSON文檔的部分內(nèi)容。 JsonPath有許多編程語(yǔ)言析苫,如Javasc...
    小娟_bb93閱讀 6,837評(píng)論 2 2
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 2,985評(píng)論 1 3
  • 上網(wǎng)原理 1衩侥、爬蟲(chóng)概念 爬蟲(chóng)是什麼? 蜘蛛茫死,蛆,代碼中屡久,就是寫(xiě)了一段代碼忆首,代碼的功能從互聯(lián)網(wǎng)中提取數(shù)據(jù) 互聯(lián)網(wǎng): ...
    riverstation閱讀 8,052評(píng)論 1 2
  • 1.request的使用: Requests 唯一的一個(gè)非轉(zhuǎn)基因的 Python HTTP 庫(kù)糙及,人類(lèi)可以安全享用:...
    HZGTK閱讀 1,022評(píng)論 0 0
  • 一筛欢、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,746評(píng)論 0 10