1. 程式人生 > >針對json.loads()報錯的解決方案

針對json.loads()報錯的解決方案

str='''{\"count\":5,\"sub_images\":[{\"url\":\"http:\\/\\/p3.pstatp.com\\/origin\\/pgc-image\\/153118629842496112fc8be\",\"width\":640,\"url_list\":[{\"url\":\"http:\\/\\/p3.pstatp.com\\/origin\\/pgc-image\\/153118629842496112fc8be\"},{\"url\":\"http:\\/\\/pb9.pstatp.com\\/origin\\/pgc-image\\/153118629842496112fc8be\"},{\"url\":\"http:\\/\\/pb1.pstatp.com\\/origin\\/pgc-image\\/153118629842496112fc8be\"}],\"uri\":\"origin\\/pgc-image\\/153118629842496112fc8be\",\"height\":960},{\"url\":\"http:\\/\\/p3.pstatp.com\\/origin\\/pgc-image\\/15311863111893fba0fc97b\",\"width\":640,\"url_list\":[{\"url\":\"http:\\/\\/p3.pstatp.com\\/origin\\/pgc-image\\/15311863111893fba0fc97b\"},{\"url\":\"http:\\/\\/pb9.pstatp.com\\/origin\\/pgc-image\\/15311863111893fba0fc97b\"},{\"url\":\"http:\\/\\/pb1.pstatp.com\\/origin\\/pgc-image\\/15311863111893fba0fc97b\"}],\"uri\":\"origin\\/pgc-image\\/15311863111893fba0fc97b\",\"height\":959},{\"url\":\"http:\\/\\/p3.pstatp.com\\/origin\\/pgc-image\\/1531186304766ef8e818772\",\"width\":640,\"url_list\":[{\"url\":\"http:\\/\\/p3.pstatp.com\\/origin\\/pgc-image\\/1531186304766ef8e818772\"},{\"url\":\"http:\\/\\/pb9.pstatp.com\\/origin\\/pgc-image\\/1531186304766ef8e818772\"},{\"url\":\"http:\\/\\/pb1.pstatp.com\\/origin\\/pgc-image\\/1531186304766ef8e818772\"}],\"uri\":\"origin\\/pgc-image\\/1531186304766ef8e818772\",\"height\":1007},{\"url\":\"http:\\/\\/p3.pstatp.com\\/origin\\/pgc-image\\/153118629255722f4ffad5d\",\"width\":640,\"url_list\":[{\"url\":\"http:\\/\\/p3.pstatp.com\\/origin\\/pgc-image\\/153118629255722f4ffad5d\"},{\"url\":\"http:\\/\\/pb9.pstatp.com\\/origin\\/pgc-image\\/153118629255722f4ffad5d\"},{\"url\":\"http:\\/\\/pb1.pstatp.com\\/origin\\/pgc-image\\/153118629255722f4ffad5d\"}],\"uri\":\"origin\\/pgc-image\\/153118629255722f4ffad5d\",\"height\":937},{\"url\":\"http:\\/\\/p1.pstatp.com\\/origin\\/pgc-image\\/15311863179532decab8f79\",\"width\":640,\"url_list\":[{\"url\":\"http:\\/\\/p1.pstatp.com\\/origin\\/pgc-image\\/15311863179532decab8f79\"},{\"url\":\"http:\\/\\/pb3.pstatp.com\\/origin\\/pgc-image\\/15311863179532decab8f79\"},{\"url\":\"http:\\/\\/pb9.pstatp.com\\/origin\\/pgc-image\\/15311863179532decab8f79\"}],\"uri\":\"origin\\/pgc-image\\/15311863179532decab8f79\",\"height\":1024}],\"max_img_width\":640,\"labels\":[\"\\u6444\\u5f71\"],\"sub_abstracts\":[\"\\u8def\\u4eba\\u8857\\u62cd\\uff0c\\u8ddf\\u5bf9\\u8c61\\u4e00\\u8d77\\u62cd\\u7167\\uff0c\\u7a7f\\u7684\\u4e0d\\u591f\\u6f02\\u4eae\\u600e\\u4e48\\u80fd\\u884c\",\" \",\" \",\" \",\" \"],\"sub_titles\":[\"\\u8def\\u4eba\\u8857\\u62cd\\uff0c\\u8ddf\\u5bf9\\u8c61\\u4e00\\u8d77\\u62cd\\u7167\\uff0c\\u7a7f\\u7684\\u4e0d\\u591f\\u6f02\\u4eae\\u600e\\u4e48\\u80fd\\u884c\",\"\\u8def\\u4eba\\u8857\\u62cd\\uff0c\\u8ddf\\u5bf9\\u8c61\\u4e00\\u8d77\\u62cd\\u7167\\uff0c\\u7a7f\\u7684\\u4e0d\\u591f\\u6f02\\u4eae\\u600e\\u4e48\\u80fd\\u884c\",\"\\u8def\\u4eba\\u8857\\u62cd\\uff0c\\u8ddf\\u5bf9\\u8c61\\u4e00\\u8d77\\u62cd\\u7167\\uff0c\\u7a7f\\u7684\\u4e0d\\u591f\\u6f02\\u4eae\\u600e\\u4e48\\u80fd\\u884c\",\"\\u8def\\u4eba\\u8857\\u62cd\\uff0c\\u8ddf\\u5bf9\\u8c61\\u4e00\\u8d77\\u62cd\\u7167\\uff0c\\u7a7f\\u7684\\u4e0d\\u591f\\u6f02\\u4eae\\u600e\\u4e48\\u80fd\\u884c\",\"\\u8def\\u4eba\\u8857\\u62cd\\uff0c\\u8ddf\\u5bf9\\u8c61\\u4e00\\u8d77\\u62cd\\u7167\\uff0c\\u7a7f\\u7684\\u4e0d\\u591f\\u6f02\\u4eae\\u600e\\u4e48\\u80fd\\u884c\"]}
'''

當看到上述字串,如果想獲得url的值,自然而然想到的是用 json.loads(str) 將字串轉換成json型別,這時因為loads()能夠在把字串轉換成json型別時自動去掉\,轉換後結果如下:

str_='''{'count': 5, 'sub_images': [{'url': 'http://p3.pstatp.com/origin/pgc-image/153118629842496112fc8be', 'width': 640, 'url_list': [{'url': 'http://p3.pstatp.com/origin/pgc-image/153118629842496112fc8be'}, {'url': 'http://pb9.pstatp.com/origin/pgc-image/153118629842496112fc8be'}, {'url': 'http://pb1.pstatp.com/origin/pgc-image/153118629842496112fc8be'}], 'uri': 'origin/pgc-image/153118629842496112fc8be', 'height': 960}, {'url': 'http://p3.pstatp.com/origin/pgc-image/15311863111893fba0fc97b', 'width': 640, 'url_list': [{'url': 'http://p3.pstatp.com/origin/pgc-image/15311863111893fba0fc97b'}, {'url': 'http://pb9.pstatp.com/origin/pgc-image/15311863111893fba0fc97b'}, {'url': 'http://pb1.pstatp.com/origin/pgc-image/15311863111893fba0fc97b'}], 'uri': 'origin/pgc-image/15311863111893fba0fc97b', 'height': 959}, {'url': 'http://p3.pstatp.com/origin/pgc-image/1531186304766ef8e818772', 'width': 640, 'url_list': [{'url': 'http://p3.pstatp.com/origin/pgc-image/1531186304766ef8e818772'}, {'url': 'http://pb9.pstatp.com/origin/pgc-image/1531186304766ef8e818772'}, {'url': 'http://pb1.pstatp.com/origin/pgc-image/1531186304766ef8e818772'}], 'uri': 'origin/pgc-image/1531186304766ef8e818772', 'height': 1007}, {'url': 'http://p3.pstatp.com/origin/pgc-image/153118629255722f4ffad5d', 'width': 640, 'url_list': [{'url': 'http://p3.pstatp.com/origin/pgc-image/153118629255722f4ffad5d'}, {'url': 'http://pb9.pstatp.com/origin/pgc-image/153118629255722f4ffad5d'}, {'url': 'http://pb1.pstatp.com/origin/pgc-image/153118629255722f4ffad5d'}], 'uri': 'origin/pgc-image/153118629255722f4ffad5d', 'height': 937}, {'url': 'http://p1.pstatp.com/origin/pgc-image/15311863179532decab8f79', 'width': 640, 'url_list': [{'url': 'http://p1.pstatp.com/origin/pgc-image/15311863179532decab8f79'}, {'url': 'http://pb3.pstatp.com/origin/pgc-image/15311863179532decab8f79'}, {'url': 'http://pb9.pstatp.com/origin/pgc-image/15311863179532decab8f79'}], 'uri': 'origin/pgc-image/15311863179532decab8f79', 'height': 1024}], 'max_img_width': 640, 'labels': ['攝影'], 'sub_abstracts': ['路人街拍,跟物件一起拍照,穿的不夠漂亮怎麼能行', ' ', ' ', ' ', ' '], 'sub_titles': ['路人街拍,跟物件一起拍照,穿的不夠漂亮怎麼能行', '路人街拍,跟物件一起拍照,穿的不夠漂亮怎麼能行', '路人街拍,跟物件一起拍照,穿的不夠漂亮怎麼能行', '路人街拍,跟物件一起拍照,穿的不夠漂亮怎麼能行', '路人街拍,跟物件一起拍照,穿的不夠漂亮怎麼能行']}
'''

然而有時轉換過程中會出現錯誤:

'dict' object has no attribute 'loads'

而且這種錯誤是通過增加encoding='utf-8'後所不能解決的。

這時,我們可以用eval(str)函式將字串轉換成字典型別,程式碼如下:

m=str.replace('\\','')  #去除str中的\
str_=eval(m)