求解决json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
问题原因就是,接口响应不是一个标准的json,需要将'var city_data= '这些字符删除,之后再转换为json。具体到代码层面就是,应该是json.loads(city_data),但是你的传参还是原始的响应。修改后的代码如下:
import json
url = 'https://j.i8tq.com/weather2020/search/city.js'
res = requests.get(url)
city_data = res.text[len('var city_data= '):]
print(json.loads(city_data))
有帮助的话,辛苦点采纳~
你的代码里用的是切片取后面 json 格式的字符串,这种写成固定长度取值的方法,如果服务器上改变了头部长度就跑不起来了
最好改用正则动态提起,这样就不受头边变量名的影响了:
import json
import requests
import re
aurl = 'https://j.i8tq.com/weather2020/search/city.js'
result = requests.get(aurl).content.decode('utf-8')
citydata = re.search('\{[\s\S]*\}', result).group() # 正则提取 {} 之间的内容
citydata = json.loads(citydata)
print(citydata)
直接用字符串的replace方法即可
import json,requests
url = 'https://j.i8tq.com/weather2020/search/city.js'
res = requests.get(url).content.decode('utf-8')
citydata = res.replace('var city_data = ','').strip()
print(json.loads(citydata))
可能是突然中断导致日志log出现了问题,删除日志文件看下,参考这里看下是否空字节引起的 https://blog.51cto.com/u_15687422/5389959
或者re = eval(re) 然后再load