【问题标题】:Python Requests - response.json() not working as intendedPython 请求 - response.json() 未按预期工作
【发布时间】:2021-07-15 03:40:36
【问题描述】:

我正在尝试从 Python 的请求模块调用 API。在邮递员上,返回的响应标头中的 Content-Type 是application/json; charset=utf-8,响应 json 数据是我期望的样子。但是,在 python 上的 API 的 get 方法之后运行 response.json() 会引发错误 simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

希望有人能帮助解释为什么会发生这种情况。

Postman 返回内容的前几行:

{
    "Pagination": {
        "query": "",
        "index": "PRODUCTION_PG_FEATURED_DESC",
        "limit": "100",
        "page": 1,
        "total": 8556,
        "lastPage": "/api/v3/browse?_tags=adidas&page=10&productCategory=sneakers&resultsPerPage=100",
        "sort": [
            "featured"
        ],
        "order": [
            "DESC"
        ],
        "currentPage": "/api/v3/browse?_tags=adidas&page=1&productCategory=sneakers&resultsPerPage=100",
        "nextPage": "/api/v3/browse?_tags=adidas&page=2&productCategory=sneakers&resultsPerPage=100",
        "previousPage": null
    }, 

我的代码块:

import requests

productsAPI = 'https://stockx.com/api/browse?_tags=nike&productCategory=sneakers&page=1&resultsPerPage=100'
headers = {"accept": "*/*", "accept-language": "en-US,en;q=0.9", "accept-encoding" : "gzip, deflate, br","User-Agent" :"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36", 
        "Connection" : "keep-alive"}
response = requests.get(productsAPI, headers = headers)
print(response.text)
        
if response.status_code != 200:
    print(response.status_code)
try: 
    data = response.json()
except:
    print('fail')

print(data["Facets"]["brand"])

【问题讨论】:

  • 你能显示响应的内容是什么吗?
  • Edit 您的问题非常简单。不要将代码/数据放入 cmets。
  • 以上 json 有效(缺少关闭 })。如果response.json()报错,您可以在这里粘贴response.text进行分析。
  • 您说的是“邮递员”,响应是您所期望的,但错误在于 request 模块的使用,但尚未提供 response 对象的确切状态。请提供来自response 对象的相关字段的输出(例如print(response.text) 或其标头),而不仅仅是邮递员提供的预期输出。
  • 向我们展示您的代码。很容易犯你眼睛看不到的愚蠢错误。

标签: python json python-requests


【解决方案1】:

查看您的代码,我不确定您如何看不到明显的问题。你有这个标题:

    "accept-encoding" : "gzip, deflate, br",

服务器很高兴地接受了您的建议,并缩小并压缩了响应。如果您不准备接受编码,那么看在上帝的份上,请摆脱说您会接受的行。这样就解决了。

如果您一开始就发布了代码,我们可能会更早发现这一点。

【讨论】:

  • 删除 accept-encoding 确实有效!但是如果想要 json 格式,而不是从标题中删除 k-v,期望值是多少?
  • 嘿蒂姆!谢谢回复。有用。只是作为一个建议,如果你能对回应多一点耐心和不那么咄咄逼人,我真的很感激。自尼克松以来,并不是每个人都在编码。正在尽力了解问题所在。此外,它也不是那么明显,因为邮递员的自动生成的标头包含接受编码,这让我偏离了答案。
  • 我的回复并不激进。如果您在开始时包含代码,我们可以在几个小时内解决这个问题,这是绝对正确的。该网站的指南都清楚地说明了如何正确提问。几十年来,我已经回答了数以万计的技术问题,你可以从我的声誉评分中看出我通常很有耐心,但是当我看到看起来很明显的错误时,我有时会失去耐心。毕竟,免费咨询值得您付出的每一分钱。 ;)
猜你喜欢
  • 2015-04-11
  • 2018-04-24
  • 1970-01-01
  • 2018-01-08
  • 2014-11-12
  • 2018-05-14
  • 2018-04-24
相关资源
最近更新 更多