在python中读取文件:json.decoder.JSONDecodeError

问题描述 投票:-2回答:1

我有一个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"
}
python json
1个回答
-2
投票

很可能你的文件是空的。

例:

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)
© www.soinside.com 2019 - 2024. All rights reserved.