【问题标题】:Response returns string not dictionairy - TypeError响应返回字符串不是字典 - TypeError
【发布时间】:2023-03-19 12:44:01
【问题描述】:

我使用 Requests 获得了一个带有 Auth 密钥的简单 API 响应,但是当我尝试使用通用 dict 表示法获取它时,我被告知它是一个字符串,我必须使用 INT 索引。我觉得我遗漏了一些明显但无法弄清楚的东西。

>>>import requests

>>>r = requests.get(api_url).text

>>>print r

{"PID":"foo","LoginToken":"barbarbarfoofoo","Status":"OK"}

>>>print r['LoginToken']

TypeError:字符串索引必须是整数

我使用 get.content 得到相同的结果

【问题讨论】:

    标签: python python-requests


    【解决方案1】:

    试试

    requests.get(api_url).json
    

    requests.get(api_url).json()
    

    取决于您拥有的请求版本

    【讨论】:

    • .json 是一个属性的版本现在已经很遥远了。
    • (哈哈,是的,但我只是被那个...(实际上是昨天:P)
    • 这使用 json() 非常有效。让我感到困惑的是 API 文档说输出是字符串。
    • 让我猜猜:一个安装了requests库的Ubuntu系统?只需使用 virtualenv 并升级,0.8.x 是 ancient
    • @scbro:因为您使用了response.text 属性,它将响应解码为文本。
    【解决方案2】:

    正如名称所示,requests 响应对象的 .text 属性是文本。如果您的网站返回 JSON 响应,您需要使用类似

    response = json.loads(r)
    

    这将使response 成为一个字典。

    或者,

    r = requests.get(api_url).json()
    

    将使r 成为字典。

    【讨论】:

      【解决方案3】:

      它很可能是 JSON,它与典型的 Python 数据结构有很多共同点。如果你解码它,你会得到一个字典:

      import json
      json.loads(r)
      

      【讨论】:

      • requests 为您提供response.json() 方法。它将使用正确的编码(如果需要,自动检测)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 2015-03-01
      • 2021-08-29
      • 2017-09-02
      相关资源
      最近更新 更多