Tablib无法将JSON API响应转换为XLSX文件并抛出错误密钥错误:0

2024-06-07 16:49:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将调用API后得到的JSON响应转换为excel文件。我不需要添加特定的头或者只获取特定的数据,我只需要这个调用返回的所有信息。你知道吗

我找到了tabliblibrary。你知道吗

当我从GitLab获取数据时,我设法使它工作,但是在将负载更改为Tfs之后,我得到了一个错误,我不确定问题是什么或者如何解决。你知道吗

这是我的密码:

import requests
import urllib3
import json
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import tablib
import datetime
import time
import os

class gitlab():

    def get_closed():

        url = "https://IP:443/DefaultCollection/_apis/projects"

        payload = {}

        querystring = {"api-version":"4.1"}

        headers = {
            'Content-Type': "application/json-patch+json",
            'Authorization': "KEY" 
        }

        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

        response = requests.request(
            "GET", url, headers=headers, data=payload, params=querystring,  verify=False)

        return json.loads(response.text)


if __name__ == "__main__":

    list_b = gitlab.get_closed() 

    print(list_b)
    data = tablib.Dataset()

    data.json = json.dumps(list_b)

    data_export = data.export('xlsx')

    filename = os.path.dirname(os.path.realpath(__file__)) +'/closed_' + str(datetime.date.today()) + '.xlsx'

    with open(filename, 'wb') as f: 
        f.write(data_export)  

    f.close()

使用python script执行,其中python的版本是3.7.2,显示以下错误:

{'count': 1, 'value': [{'id': 'ID', 'name': 'TFS', 'url': 'https://TFS/DefaultCollection/_apis/projects/PROJ', 'state': 'wellFormed', 'revision': 00, 'visibility': 'private'}]}

Traceback (most recent call last):  File ".\gitlab.py", line 94, in <module>    data.json = json.dumps(list_with_bugs, indent=4, ensure_ascii=False)  File "C:\Users\marialena\AppData\Local\Programs\Python\Python37\lib\site-packages\tablib\formats\_json.py", line 39, in import_set
    dset.dict = json.loads(in_stream)
  File "C:\Users\marialena\AppData\Local\Programs\Python\Python37\lib\site-packages\tablib\core.py", line 381, in _set_dict
    if isinstance(pickle[0], list):
KeyError: 0

您也可以在输出中看到API响应。为什么tablib无法转换为excel?你知道吗


Tags: inimportjsonurldataospackagesgitlab
1条回答
网友
1楼 · 发布于 2024-06-07 16:49:24

Dataset.json希望接收序列化列表。问题中的代码正在传递序列化的dict,这就是错误的原因。你知道吗

查看数据,字典中的value键的值似乎是必需的,因此将其传递给数据集。你知道吗

>>> import json
>>> import tablib
>>> d = {'count': 1, 'value': [{'id': 'ID', 'name': 'TFS', 'url': 'https://TFS/DefaultCollection/_apis/projects/PROJ', 'state': 'wellFormed', 'revision': 00, 'visibility': 'private'}]}
>>> ds = tablib.Dataset()
>>> ds.json = json.dumps(d['value'])
>>> with open('test.xlsx', 'wb') as f:
...     f.write(ds.export('xlsx'))

我看到您在项目的问题跟踪程序上提出了一个错误。虽然这种行为可以说不是一个bug,但是如果代码发出一个更有意义的错误消息,那么它肯定是一种改进。你知道吗

相关问题 更多 >

    热门问题