json.loads解码字符串时出错:JSONDecodeError: Invalid \escape: line 1 column 2687 (char 2686)

一、问题描述

在使用爬虫爬取数据时使用json.loads()解码JSON数据时遇到如下错误:

1 致错语句:

 json_data = json.loads(str(star_infos).replace("\'","\"")) 

2 错误

---------------------------------------------------------------------------JSONDecodeError                           Traceback (most recent call last)<ipython-input-9-294f59eab595> in <module>
      9      #从每个选手的百度百科页面上爬取,并保存
---> 10      crawl_everyone_wiki_urls()
     11      print("所有信息爬取完成!")
<ipython-input-6-2fe5f3e0c9f9> in crawl_everyone_wiki_urls()
     59         down_save_pic(name,pic_urls)
     60         #将个人信息存储到json文件中
---> 61         json_data = json.loads(str(star_infos).replace("\'","\""))
     62         with open('work/' + 'stars_info.json', 'w', encoding='UTF-8') as f:
     63             json.dump(json_data, f, ensure_ascii=False)
...
...
/opt/conda/envs/python35-paddle120-env/lib/python3.7/json/decoder.py in raw_decode(self, s, idx)
    351         """
    352         try:
--> 353             obj, end = self.scan_once(s, idx)
    354         except StopIteration as err:
    355             raise JSONDecodeError("Expecting value", s, err.value) from None
JSONDecodeError: Invalid \escape: line 1 column 2687 (char 2686)

二 错误分析

该异常的格式一般为:
json.decoder.JSONDecodeError: Invalid \escape: line 1 column 1 (char 1)
注意后面的数字 line 123456789(数字可以为任意值), column 123456789(数字可以为任意值),char 123456789 (数字可以为任意值)
异常的中文释义:
JSONDecodeError(JSON 解码错误)Invalid \escape:无效字符反斜线 ,也就是说你的待格式字符串中包含一个
该异常一般出现在 JSON 格式化的情况下,如果 JSON 中出现特殊字符易出现该 BUG。
参考链接: https://blog.csdn.net/hihell/article/details/109526943

三 解决方式

原本的解码语句:(要解码的python对象为 “star_infos” )

 json_data = json.loads(str(star_infos).replace("\'","\"")) 

由于问题是字符格式导致的,因此先使用json.dumps()将python对象编码成JSON字符串(自认为就是对python对象进行规范,使其符合JSO的解码格式)

string = json.dumps(star_infos)

然后再进行解码(此时python对象变为"string")

json_data = json.loads(str(string).replace("\'", "\""))

猜你喜欢

转载自blog.csdn.net/weixin_40408952/article/details/112597451