這篇文章給大家分享的是有關(guān)python如何解析含有重復(fù)key的json的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、網(wǎng)站建設(shè)與策劃設(shè)計(jì),四子王網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:四子王等地區(qū)。四子王做網(wǎng)站價(jià)格咨詢:028-86922220python自帶的json包能夠方便的解析json文本,但是如果json文本中包含重復(fù)key的時(shí)候,解析的結(jié)果就是錯(cuò)誤的。如下為例
{"key":"1", "key":"2", "key":"3", "key2":"4"}
經(jīng)過解析,結(jié)果卻如下所示:
{ "key":"3", "key2":"4" }
原因是python解析的時(shí)候是創(chuàng)建一個(gè)字典,首先會讀取到key的值,但是后面遇到重復(fù)鍵的時(shí)候,后來的值會覆蓋原來的值,導(dǎo)致最后只有一個(gè)key的值留下來。
這肯定不是我們想要的結(jié)果,其中一種結(jié)果可以是將相同鍵的值聚合成一個(gè)數(shù)組,即如下所示。
{ "key":["1","2","3"], "key2":"4" }
如何得到這種結(jié)果呢?python的json包還是留下了活路的。首先來看一下解析函數(shù)loads的原型。
json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
要注意的是object_pairs_hook這個(gè)參數(shù),這是個(gè)回調(diào)函數(shù),在解析json文本的時(shí)候會調(diào)用它并更改返回的結(jié)果。為了得到前述的結(jié)果,我們定義如下的hook函數(shù):
def my_obj_pairs_hook(lst): result={} count={} for key,val in lst: if key in count:count[key]=1+count[key] else:count[key]=1 if key in result: if count[key] > 2: result[key].append(val) else: result[key]=[result[key], val] else: result[key]=val return result
在解析文本的時(shí)候?qū)⑸鲜龊瘮?shù)作為參數(shù)傳入,代碼如下所示:
json.loads(data, object_pairs_hook=my_obj_pairs_hook)
即可得到前述的相同鍵的值合并為數(shù)組的結(jié)果。
在這個(gè)示例中,傳入my_obj_pairs_hook的參數(shù)是一個(gè)元組列表,大致如下所示:
[("key","1"),("key","2"),("key","3"),("key2","4")]
之所以參數(shù)是這個(gè)樣子,是因?yàn)檫@幾個(gè)鍵值對組成了一個(gè)字典,python使用默認(rèn)的dict方法返回字典,自然會出現(xiàn)值覆蓋的情況。而有了my_obj_pairs_hook之后就調(diào)用這個(gè)函數(shù)得到字典結(jié)果,這樣我們就保證了鍵值的不丟失,最終得到我們希望的結(jié)果。如果是個(gè)更加復(fù)雜的json文本,則每次解析一個(gè)字典的時(shí)候都會調(diào)用這個(gè)函數(shù),也會傳入不同的元組列表,大致如示例所示。
感謝各位的閱讀!關(guān)于“python如何解析含有重復(fù)key的json”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。