最近在開發(fā)爬蟲過程中,遇到一些python在解析不規(guī)則json字符串時出現(xiàn)解析不了的情況,特些記錄一下:
正常情況下我們?nèi)〉降膉son字符串應(yīng)該都是像下面這種情況,用"包起來的
{"name":"test"}
而在爬取網(wǎng)站中會遇到很多不規(guī)則的json字符串,這些json字符串在javascript之中是可以正常解析的,但是在python中就會拋出ValueError異常。對于這種不是用雙引號包起來的不規(guī)則json字符串可以使用一個第三方包demjson來解決,安裝命令如下:
pip install demjson
安裝好后直接在代碼中調(diào)用就可以直接把不規(guī)則的json字符串轉(zhuǎn)化為標(biāo)準(zhǔn)python字典
import demjson
str = '{name: "test"}'
print demjson.decode(str)

第二種情況是得到的json字符串是經(jīng)過unicode轉(zhuǎn)碼的,這時拿到的json字符串會像下面這樣:
{name:\u0027test\u0027}
這種解決辦法可以使用字符串替換函數(shù)把\u0027轉(zhuǎn)化為",再使用demjson.decode就可以轉(zhuǎn)化成功。
import demjson
str = '{name: \u0027test\u0027}'
str = str.replace('\u0027', '\"')
print demjson.decode(str)

第三種情況是拿回來的json字符串的鍵是有"的,但是這時的json字符串是經(jīng)過特殊字符轉(zhuǎn)義的,如下
{\"name\":\"test\"}
這種情況在控制臺是能夠直接處理,但是在我的scrpay程序中會遇到一些問題,我的解決思路是把字符串轉(zhuǎn)回去再處理
import demjson
str = {\"name\":\"test\"}
print demjson.decode(str.decode("string_escape"))

以上就是我遇到的這三種問題的處理思路供大家參考。