记录:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)的坑

在使用Python爬虫抓取豆瓣小说介绍时,遇到JSON加载错误。通过去除字符串中的';jsonp1(',解决了load()函数无法正确解析的问题。本文记录了错误排查过程及解决方案。

昨天在学习python爬虫的时候,跟着视频做个一个爬豆瓣小说介绍的爬虫,爬的是手机版的json,在运行的时候,出现了下图错误:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
错误主要是load()报错,意思应该是,这个字符串不是load要的那种json类型的字符串。
在这里插入图片描述
百度了好久,用了好多方式,例如,换“\\”为"\",删除u“\”什么的,eval方法,还试过改变解码方式为unicode_escape等等,反正作为一个小白是真的难(没有了解过json),一直查就是搞不定,中间还去“json在线解析”那解析过,解析显示错误,我就纳闷,从网页上直接拿的json居然显示解析错误,我用pycharm建立了一个json文件,把东西拷进去显示是没问题的(可能是卡了,严重误导我,但是确实上边打绿色的勾勾了),然后今天早上重建,拷进去居然显示错误了???在这里插入图片描述
唉,我去,昨天带这个;jsonp1(就没问题,才让我一直瞎搞,其实就是把这个还有末尾相应的删了就好了,然后就成功load了。
但是我就很不理解,为啥视频上人家就没处理这里,但是就可以正常load,我还得处理一下才行,中间我还反反复复看了几遍视频,人家就是不用处理,把requests.get拿回来的content直接解码,就可以load,所以昨天我一直就没想过处理;jsonp1(。现在还是不理解为什么人家就能直接load,我得删了才行,先记录一下,等过两天学学json再看。

### 常见错误及解决方法 `json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)` 是在尝试使用 Python 的 `json` 模块解析 JSON 字符串时常见的错误之一。此错误通常表明提供的 JSON 字符串为空或格式不正确,导致解析失败。具体来说,错误信息中的 `Expecting value: line 1 column 1 (char 0)` 表示解析器期望找到一个值,但在输入的起始位置未找到有效数据[^2]。 #### 原因分析 1. **空字符串**:尝试解析的字符串为空,即长度为零。 2. **格式错误**:JSON 字符串格式不正确,例如缺少引号、括号不匹配等。 3. **编码问题**:字符串中包含非 UTF-8 编码字符,而没有正确处理这些字符。 4. **网络请求问题**:从网络请求获取的数据可能不完整或请求失败,返回了错误页面而非预期的 JSON 数据。 #### 解决方案 1. **检查字符串是否为空**: 在解析之前,确保字符串不是空的。 ```python import json data_str = get_data() # 假设这是从某个地方获取的字符串 if data_str: try: data = json.loads(data_str) except json.JSONDecodeError as e: print(f"JSONDecodeError: {e}") else: print("数据为空") ``` 2. **验证 JSON 格式**: 使用在线工具或手动检查 JSON 字符串是否符合标准格式。确保所有的键和字符串值都被双引号包围,没有多余的逗号等。 3. **处理编码问题**: 如果确定字符串不为空但仍然无法解析,可能是编码问题。尝试指定正确的编码方式。 ```python response.encoding = 'utf-8' # 假设 response 是 requests.get() 返回的对象 data_str = response.text ``` 4. **处理网络请求问题**: 确保网络请求成功,并且返回的是预期的 JSON 数据。可以通过打印响应内容来检查。 ```python import requests url = 'http://example.com/api/data' response = requests.get(url) if response.status_code == 200: try: data = json.loads(response.text) except json.JSONDecodeError as e: print(f"JSONDecodeError: {e}") else: print(f"请求失败,状态码:{response.status_code}") ``` 5. **捕获异常**: 在解析 JSON 时,总是使用 `try-except` 结构来捕获并处理异常,这样可以更好地了解错误的具体原因。 ```python import json try: data = json.loads(data_str) except json.JSONDecodeError as e: print(f"JSONDecodeError: {e}") ``` 6. **截取特定部分**: 如果 JSON 数据被包裹在其他文本中,例如回调函数的参数,需要先截取正确的部分再进行解析。 ```python data_str = xba.text[20:-2] # 根据实际情况调整索引 data = json.loads(data_str) ``` 通过以上方法,可以有效地解决 `json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)` 错误。确保输入的 JSON 字符串是有效的,并且在网络请求中正确处理响应内容,是避免此类错误的关键。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值