【问题标题】:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) in requestsjson.decoder.JSONDecodeError:期望值:请求中的第 1 行第 1 列(字符 0)
【发布时间】:2019-10-28 16:19:58
【问题描述】:

我正在尝试从第三方 API 获取一些数据,但无论如何我总是得到相同的结果。

这是我的代码:

row = db.execute("SELECT isbn, title, author, year FROM books WHERE \
                        isbn = :isbn",
                        {"isbn": isbn})

        bookInfo = row.fetchall()

        """ GOODREADS reviews """

        # Read API key from env variable
        key = os.getenv('GOODREADS_KEY')
        
        # Query the api with key and ISBN as parameters
        query = requests.get("https://www.goodreads.com/book/review_counts.json",
                params={"key": key, "isbns": isbn})

        # Convert the response to JSON
        response = query.json()

        # "Clean" the JSON before passing it to the bookInfo list
        response = response['books'][0]

        # Append it as the second element on the list. [1]
        bookInfo.append(response)

        """ Users reviews """

         # Search book_id by ISBN
        row = db.execute("SELECT id FROM books WHERE isbn = :isbn",
                        {"isbn": isbn})

        # Save id into variable
        book = row.fetchone() # (id,)
        book = book[0]

        # Fetch book reviews
        results = db.execute("SELECT users.username, review, rate, \
                            to_char(date, 'DD Mon YY - HH24:MI:SS') as time \
                            FROM users \
                            INNER JOIN reviews \
                            ON users.id = reviews.user_id \
                            WHERE book_id = :book \
                            ORDER BY time",
                            {"book": book})
                  
        if results.rowcount == 0:
            return render_template("error.html", message="kept you waiting, huh")

        reviews = results.fetchall()

        return render_template("book.html", bookInfo=bookInfo, reviews=reviews) 

这是错误:

Traceback (most recent call last):
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\flask\app.py", line 2463, in __call__
    return self.wsgi_app(environ, start_response)
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\flask\app.py", line 2449, in wsgi_app
    response = self.handle_exception(e)
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\flask\app.py", line 1866, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\Enrique Mota\Documents\project1\LR.py", line 9, in decorated_function
    return f(*args, **kwargs)
  File "C:\Users\Enrique Mota\Documents\project1\application.py", line 195, in book
    response = query.json()
  File "c:\users\enrique mota\documents\project1\env\lib\site-packages\requests\models.py", line 897, in json
    return complexjson.loads(self.text, **kwargs)
  File "C:\Users\Enrique Mota\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "C:\Users\Enrique Mota\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\Enrique Mota\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

这些是获取图书信息的参数:

根据 ISBN 列表获取评论统计信息 在给定 ISBN 列表的情况下获取书籍的评论统计信息。 ISBN 可以指定为一个数组(例如 isbns[]=0441172717&isbns[]=0141439602)或单个逗号分隔的字符串(例如 isbns=0441172717,0141439602)。 您可以混合使用 ISBN10 和 ISBN13,但如果未指定任何内容,则会收到 422 错误,如果找不到,则会收到 404。 网址:https://www.goodreads.com/book/review_counts.json(示例网址) HTTP 方法:GET 参数:

key: Developer key (required).

isbns: Array of ISBNs or a comma separated string of ISBNs (1000 ISBNs per request max.)

format: json

callback: function to wrap JSON response

这是一个示例网址:

https://www.goodreads.com/book/review_counts.json?isbns=0441172717%2C0141439602&key=IcOZSbhCZizWqiomGMUw

据我了解,我只需要我在代码中指定的两个参数,无论我如何编写应用程序,它总是有响应/错误,我做错了什么?

我确实导入了 json、os、jsonify 和 requests btw。

【问题讨论】:

  • 看起来,当您请求一本不存在的图书时,响应是纯文本“没有图书与这些 ISBN 匹配”。也许这就是你的 JSON 解析器的原因。您可能需要在调用 query.json() 之前检查响应代码
  • 正是这样,我接受了 Ozan Bulut 的回答,认为他的回答很有帮助,因为他说了同样的话,甚至包括一个例子,无论如何,感谢您的评论

标签: python json python-requests


【解决方案1】:

你应该先检查状态码。

if  query.status_code == requests.codes['ok']:
     response = query.json()
else:
     # Do something else 

【讨论】:

    【解决方案2】:

    以下代码有效,因此您需要检查您发送的参数(密钥和 isbns)

    import requests
    
    r = requests.get("https://www.goodreads.com/book/review_counts.json",
                     params={"key": 'IcOZSbhCZizWqiomGMUw', "isbns": '0441172717,0141439602'})
    if r.status_code == 200:
        print(r.json())
    

    输出

    {'books': [{'id': 47173379, 'isbn': '0441172717', 'isbn13': '9780441172719', 'ratings_count': 85, 'reviews_count': 211, 'text_reviews_count': 5, 'work_ratings_count': 641157, 'work_reviews_count': 1080654, 'work_text_reviews_count': 17613, 'average_rating': '4.22'}, {'id': 1953, 'isbn': '0141439602', 'isbn13': '9780141439600', 'ratings_count': 705737, 'reviews_count': 1237587, 'text_reviews_count': 11902, 'work_ratings_count': 758306, 'work_reviews_count': 1389929, 'work_text_reviews_count': 15806, 'average_rating': '3.83'}]}
    

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 2023-03-25
      • 2020-11-11
      • 2017-05-09
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多