瓶请求.json作战需求文件

2024-10-01 17:24:03 发布

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

我将JSON数据提交到api(用Flask构建)端点,我需要将这些数据导出到excel,但问题是一旦api接收到数据并用加载它请求.json数据的“body”部分被置乱-与我接收它的顺序不同,这完全破坏了我的表格标题,更不用说需要输出excel格式。在

下面是我接收到的api的原始JSON数据

{
"data": {
    "header": [
        "date,group.groupname,user.NameSurname,forwarding_number,reciver_number,CallerNameSurname,alert,connection,call_summ"
    ],
    "body": [
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Romāns Tiščenko",
            "forwarding_number": "66055002",
            "reciver_number": "66055002",
            "CallerNameSurname": false,
            "alert": "00:00:14",
            "connection": "00:00:53",
            "call_summ": "00:01:07"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Romāns Tiščenko",
            "forwarding_number": "66055002",
            "reciver_number": "66055002",
            "CallerNameSurname": false,
            "alert": "00:00:27",
            "connection": "00:00:25",
            "call_summ": "00:00:52"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Romāns Tiščenko",
            "forwarding_number": "66055002",
            "reciver_number": "66055002",
            "CallerNameSurname": false,
            "alert": "00:00:16",
            "connection": "00:01:00",
            "call_summ": "00:01:16"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Arvīds Boļesko",
            "forwarding_number": "66055001",
            "reciver_number": "66055001",
            "CallerNameSurname": false,
            "alert": "00:00:22",
            "connection": "00:00:52",
            "call_summ": "00:01:14"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Romāns Tiščenko",
            "forwarding_number": "66055002",
            "reciver_number": "66055002",
            "CallerNameSurname": false,
            "alert": "00:00:18",
            "connection": "00:00:09",
            "call_summ": "00:00:27"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Romāns Tiščenko",
            "forwarding_number": "66055002",
            "reciver_number": "66055002",
            "CallerNameSurname": false,
            "alert": "00:00:09",
            "connection": "00:01:59",
            "call_summ": "00:02:08"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Romāns Tiščenko",
            "forwarding_number": "66055002",
            "reciver_number": "66055002",
            "CallerNameSurname": false,
            "alert": "00:00:08",
            "connection": "00:02:14",
            "call_summ": "00:02:22"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Roberts Neijs",
            "forwarding_number": "66055003",
            "reciver_number": "66055003",
            "CallerNameSurname": false,
            "alert": "00:00:04",
            "connection": "00:00:01",
            "call_summ": "00:00:05"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Arvīds Boļesko",
            "forwarding_number": "66055001",
            "reciver_number": "66055001",
            "CallerNameSurname": false,
            "alert": "00:00:57",
            "connection": "00:01:26",
            "call_summ": "00:02:23"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Roberts Neijs",
            "forwarding_number": "66055003",
            "reciver_number": "66055003",
            "CallerNameSurname": false,
            "alert": "00:00:05",
            "connection": "00:02:23",
            "call_summ": "00:02:28"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Roberts Neijs",
            "forwarding_number": "66055003",
            "reciver_number": "66055003",
            "CallerNameSurname": false,
            "alert": "00:00:06",
            "connection": "00:00:44",
            "call_summ": "00:00:50"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Romāns Tiščenko",
            "forwarding_number": "66055002",
            "reciver_number": "66055002",
            "CallerNameSurname": false,
            "alert": "00:00:08",
            "connection": "00:02:43",
            "call_summ": "00:02:51"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Roberts Neijs",
            "forwarding_number": "66055003",
            "reciver_number": "66055003",
            "CallerNameSurname": false,
            "alert": "00:00:05",
            "connection": "00:01:13",
            "call_summ": "00:01:18"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Roberts Neijs",
            "forwarding_number": "66055003",
            "reciver_number": "66055003",
            "CallerNameSurname": false,
            "alert": "00:00:09",
            "connection": "00:00:01",
            "call_summ": "00:00:10"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "administration",
            "user.NameSurname": "Ieva Sproģe",
            "forwarding_number": "67783165",
            "reciver_number": "67783165",
            "CallerNameSurname": false,
            "alert": "00:00:06",
            "connection": "00:01:30",
            "call_summ": "00:01:36"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Roberts Neijs",
            "forwarding_number": "66055003",
            "reciver_number": "66055003",
            "CallerNameSurname": false,
            "alert": "00:00:06",
            "connection": "00:00:50",
            "call_summ": "00:00:56"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "administration",
            "user.NameSurname": "Ieva Sproģe",
            "forwarding_number": "67783165",
            "reciver_number": "67783165",
            "CallerNameSurname": false,
            "alert": "00:00:04",
            "connection": "00:02:00",
            "call_summ": "00:02:04"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "customerService",
            "user.NameSurname": "Roberts Neijs",
            "forwarding_number": "66055003",
            "reciver_number": "66055003",
            "CallerNameSurname": false,
            "alert": "00:00:07",
            "connection": "00:00:26",
            "call_summ": "00:00:33"
        },
        {
            "date": "2013-01-08",
            "group.groupname": "administration",
            "user.NameSurname": "Ieva Sproģe",
            "forwarding_number": "67783165",
            "reciver_number": "67783165",
            "CallerNameSurname": false,
            "alert": "00:00:04",
            "connection": "00:00:13",
            "call_summ": "00:00:17"
        }
    ],
    "footer": [
        ",,,,,,7,8,9"
    ],
    "filename": "outGoingAnswered.xls"
}
}

正如我所说的,一旦使用请求.json“body”的每个“行”中的数据被置乱-顺序被破坏。它应该写在标题里。在

我尝试使用不同的json库加载它,但是结果是一样的,加载的数据顺序与给定的顺序不同。我完全不知道为什么会这样,这让我的生活变得非常困难,因为我对Python还比较陌生。在

我不能在标题中提到“我不能比标题中的键少”。在

作为示例输出,我可以提供稍微不同的已发布JSON数据的“加密版本”:

^{pr2}$

为了更好地增加excel导出代码:

r = request.json
data = r['data']
if data:
    # Initialize excel export
    excel = Workbook()
    sheet = excel.add_sheet('Report')

    ## Excel headers

    # Setup font styling
    font = Font()
    font.name = 'Arial'
    font.bold = True

    # Setup cell border styling
    borders = Borders()
    borders.bottom = 1
    borders.right = 1

    # Setup formating style
    style = XFStyle()
    style.font = font
    style.borders = borders

    # Write headers
    header = data['header'][0]
    headers = header.split(',')
    h = 0
    for col in headers:
        if col == 'false':
            col = ''
        sheet.write(0, h, col, style)
        h += 1

    # Write body
    rows = data['body']
    i = 1
    for row in rows:
        x = sheet.row(i)
        y = 0
        for key, value in row.iteritems():
            x.write(y, value)
            y += 1
        i += 1

    # Write footer
    footer = data['footer'][0]
    footers = footer.split(',')
    f = 0
    for col in footers:
        if col == 'false':
            col = ''
        sheet.write(i, f, col)
        f += 1

    # Setup column widths
    if h > f:
        cols = h
    else:
        cols = f
    a = 0
    while a < cols:
        sheet.col(a).width = 5000
        a += 1

    # Get report filename
    filename = data['filename'][0]

    # Setup report path
    path = "/path/to/exports/" + filename

    # Save the report
    excel.save(path)

Tags: falsenumberdategroupcolalertcallconnection
1条回答
网友
1楼 · 发布于 2024-10-01 17:24:03

Python字典是无序的,JSON对象也是。你看到的行为是正常的。在

如果需要保留顺序,请不要使用dict(),而是使用list up tuples:

   [
       ["date", "2013-01-08"],
       ["group.groupname", "customerService"],
       ["user.NameSurname", "Romāns Tiščenko"],
       ["forwarding_number", "66055002"],
       ["reciver_number", "66055002"],
       ["CallerNameSurname", false],
       ["alert", "00:00:14"],
       ["connection", "00:00:53"],
       ["call_summ", "00:01:07"]
   ],
   # ... etc.

您还可以使用data['header'][0]字符串按顺序读取正文dict()值,因为已经为您排序了:

^{pr2}$

相关问题 更多 >

    热门问题