我有一个json文件。
with open('list.json', "r") as f:
r_list = json.load(f)
崩溃:
json.decoder.JSONDecodeError:期望值:第1行第1列(char 0
我在线检查了架构,架构工作正常。
架构非常简单:
{"foo": [
{"name": "AAA\u2019s BBB CCC", "url": "/foome/foo"}
]}
试图玩:
..用完了想法 - 这是'json.load'期望二进制文件的东西吗?
编辑1代码在普通文件中工作,在scrapy类中不起作用
import scrapy
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
import json
class myScraper(scrapy.Spider):
name="testScraper"
def start_requests(self):
with open('test.json') as f:
self.logger.info(f.read()) #shows the file content
r_list = json.load(f) # breaks with the error msg
yield "foo"
def parse(self, response):
self.logger.info("foo")
'test.json'
{
"too": "foo"
}
很可能你的文件是空的。
例:
https://repl.it/@mark_boyle_sp/SphericalImpressiveIrc
更新:
你的迭代器已经用完了,正如评论中所讨论的那样。由于您记录了文件内容,因此迭代器位于文件的末尾。 (看起来像一个空文件,因此例外)
重置迭代器或将内容读取到本地值并对其进行操作。
json_str = f.read()
self.logger.info(json_str) #shows the file content
r_list = json.loads(json_str)
再次更新
(我假设)您遇到的scrapy问题是解析方法?响应体是一个字节对象,您将需要对其进行解码并在结果字符串上使用loads
,如下所示:
def parse(self, response):
self.logger.info("foo")
resp_str = response.body.decode('utf-8')
self.logger.info(resp_str) #shows the response
r_list = json.loads(json_str)