колба запрос.json

Я получаю данные JSON, отправленные на конечную точку api (с использованием Flask), и мне нужны эти данные для экспорта в excel, но проблема в том, что как только мой api получит данные и загрузит их с request.json, «тело» части данных скремблируется – не в том же порядке, который я получаю, который полностью разбивает мои заголовки таблиц, не говоря уже о необходимом формате excup excel.

Включая ниже сырые данные JSON, я получаю свой api

{ "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" } } 

Как я уже сказал, после того, как это прочитано в api с request.json, данные в каждой «строке» «тела» скремблированы – порядок нарушен. Он должен быть записан в заголовке.

Я попытался загрузить его, используя другую библиотеку json, но результат тот же, загруженные данные не в том порядке, в котором они были указаны. Я совершенно не знаю, почему это произойдет именно так, и это делает мою жизнь очень трудной, поскольку я относительно новичок в Python.

Я должен упомянуть, что я не могу сопоставлять ключи с колонками заголовков, поскольку заголовки могут иметь меньше ключей, чем в строке «body».

В качестве примера вывода я могу предложить «скремблированную версию» немного разных опубликованных данных JSON:

 { "data": { "body": [ { "group.groupname": "customerService", "connection": "00:01:28", "call_summ": "00:01:42", "CallerNameSurname": "false", "forwarding_number": "66055002", "user.NameSurname": "Arnolds Apels", "date": "2012-12-13", "reciver_number": "66055002", "alert": "00:00:14" }, { "group.groupname": "customerService", "connection": "00:01:33", "call_summ": "00:01:45", "CallerNameSurname": "false", "forwarding_number": "66055002", "user.NameSurname": "Arnolds Apels", "date": "2012-12-13", "reciver_number": "66055002", "alert": "00:00:12" }, { "group.groupname": "administration", "connection": "00:00:30", "call_summ": "00:00:33", "CallerNameSurname": "false", "forwarding_number": "67783165", "user.NameSurname": "Ieva Sproģe", "date": "2012-12-13", "reciver_number": "67783165", "alert": "00:00:03" } ], "header": [ "date,group.groupname,user.NameSurname,forwarding_number,reciver_number,CallerNameSurname,alert,connection,call_summ" ], "footer": [ "false,false,user.NameSurname,forwarding_number,reciver_number,CallerNameSurname,alert,connection,call_summ" ], "filename": [ "asdasda.xls" ] } } 

И для хорошей меры, добавляя код экспорта 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) 

One Solution collect form web for “колба запрос.json”

Словари Python неупорядочены , как и объекты JSON. Поведение, которое вы видите, является нормальным.

Если вам нужно сохранить порядок, не используйте dict() а вместо этого перечислите кортежи:

  [ ["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] для чтения значений body dict() по порядку, так как это уже упорядочено для вас:

 rows = data['body'] i = 1 for row in rows: x = sheet.row(i) y = 0 for col in headers: x.write(y, row.get(col, '')) y += 1 i += 1 
  • Текстовый файл с Python
  • Что делает «print >>» в python?
  • Захваченные переменные в «eval» в Python
  • Twitter Python Json для CSV
  • Десятичная точность Python против десятичной точности C #
  • ошибки python shutil.rmtree
  • Получите дублирующее значение в DuplicateKeyError
  • Подклассификация типов данных, которые имеют представления в Python2.7 и Python3
  •  
    Interesting Posts for Van-Lav

    Создайте papon soap-сервер на основе wsdl

    сопоставление всех символов в любом порядке в регулярном выражении

    Как поместить переменную в docstring Python

    Импорт модуля динамически с использованием imp

    Python json.loads ValueError, ожидающий разделитель

    Объекты с одинаковым идентификатором всегда равны при сравнении их с ==?

    Как я могу закрепить файл журнала в Python?

    роботизированный имитатор запястий – Kinect как датчик (закодированный на Python) для моделирования в Labview с использованием TCP

    Улучшение целостности скрипта CGI на Python, который создает учетные записи пользователей

    Замена повторных захватов

    Форма метода POST в lxml вызывает TypeError с submit_form

    Проверить, что в Django пустой запрос

    Есть ли простой способ избавиться от ненужных значений, которые появляются, когда вы используете SSH с помощью библиотеки Python в Paramiko и извлекаете вывод из CLI удаленной машины?

    Крупные файлы Python, как найти конкретные строки с определенной строкой

    Разница между переменной и get_variable в TensorFlow

    Python - лучший язык программирования в мире.