【问题标题】:Object of type Response is not JSON serializable响应类型的对象不是 JSON 可序列化的
【发布时间】:2020-05-25 03:02:46
【问题描述】:

我正在尝试将我的 json 从 api 转换为 python 中的数据框。我运行以下代码:

import requests
import pandas as pd
import simplejson as json

params = {
  "api_key": "abc",
  "format": "json"
}
r = requests.get('https://www.parsehub.com/api/v2/runs/ttx8PT-EL6Rf/data', params=params)

data = json.dumps(r) #convert to json
data = json.loads(data)
dataFrame = pd.DataFrame.from_dict(data) #convert json to dataframe
print(dataFrame)

我得到了这些错误:

Traceback (most recent call last):
  File "C:/Users/User/PycharmProjects/test/convert jsontodataframe.py", line 11, in <module>
    data = json.dumps(r) #convert to json
  File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\simplejson\__init__.py", line 395, in dumps
    return _default_encoder.encode(obj)
  File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\simplejson\encoder.py", line 296, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\simplejson\encoder.py", line 378, in iterencode
    return _iterencode(o, 0)
  File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\simplejson\encoder.py", line 273, in default
    o.__class__.__name__)
TypeError: Object of type Response is not JSON serializable

你能帮帮我吗? 有没有另一种方法可以将我的 json api 转换为 python 中的数据框?请帮帮我。

【问题讨论】:

    标签: python json pandas


    【解决方案1】:

    删除这一行:

    data = json.dumps(r) #convert to json
    

    这会将 python 字典转换为字符串 - 不是字符串转换为您在代码中注释的 json 对象。

    您的代码应如下所示:

    import requests
    import pandas as pd
    import simplejson as json
    
    params = {
      "api_key": "abc",
      "format": "json"
    }
    
    r = requests.get('https://www.parsehub.com/api/v2/runs/ttx8PT-EL6Rf/data', params=params)
    
    data = json.loads(r.json)
    dataFrame = pd.DataFrame.from_dict(data) #convert json to dataframe
    print(dataFrame)
    

    【讨论】:

    • 你能分享r.json的结果吗?它应该是 json 对象的字符串表示形式。否则json.loads() 将无法在对象上正常工作。
    • 我运行这个:: r = requests.get('parsehub.com/api/v2/runs/ttx8PT-EL6Rf/data', params=params) data = json.dumps(r) #convert to json data = json.loads(r.json ) dataFrame = pd.DataFrame.from_dict(data) #convert json to dataframe print(dataFrame)
    • 好的,所以你的变量 r 是一个响应对象(更多:w3schools.com/python/ref_requests_response.asp)。 r.json 是响应对象中的一个字段,其中包含一个字符串(str. 类型的对象)。 json.loads()str 转换为 python 字典。 json.dumps() - 这就是你正在做的 - 将 python 字典转换为字符串(这是你的错误,而不是你想要做的)。
    • 先生,实际上,我需要将此json api转换为python中的数据框。我正在使用正确的方法吗?你能帮我吗。我将非常感谢您能帮助我做到这一点。谢谢
    • 我已经编辑了我的答案 - 请参考它,如果你需要什么,请告诉我。
    猜你喜欢
    • 2022-11-02
    • 2021-12-24
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2021-07-04
    • 2021-12-10
    相关资源
    最近更新 更多