Как создать словарь из байтов (Python) - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать список из вызова API, данные выглядят так, как я думаю, это байты.

Ничего важного здесь нет:

[{"UDID ":" 00000004324234235" , "SerialNumber": "SN42A32A34", "MacAddress": "00127F287220", "Imei": "", "EasId": "443243434225346FE9", "AssetNumber": "", "DeviceFriendlyName":»00: 16: 7F: 18: 7C: B0 "," LocationGroupId ": {" Id ": {" Значение ": 544}," Uuid ":" 364243f-97342b-4287-9333-b942442313 "," Имя ":"LOCATION2"}, "LocationGroupName": "LOCATION2", "UserId": { "Идентификатор": { "Значение": 5111}, "UUID": "364243f-97342b-4287-9333-b942442313", "Название":«MDM Enroll»}, «UserName»: «Enroll123», «UserEmailAddress»: «enroll123@nitro.com», «Ownership»: «C», «PlatformId»: {«Id»: {«Value»: 10}, «Имя»: «PalmPhone»}, «Платформа»: «PalmPhone», «ModelId»: {«Id»: {«Значение»: 44}, «Имя»: «PalmPhone - X101Nitro»}, «Модель»:"PalmPhone - X101Nitro", "OperatingSystem": "1.7.44444", "PhoneNumber": "", "LastSeen": "2018-11-11T07: 46: 57.257", "EnrollmentStatus": "Enrolled", "ComplianceStatus": "Соответствует", "CompromisedStatus": Falsе, "LastEnrolledOn": "2018-11-09T18: 26: 03,610", "LastComplianceCheckOn": "0001-01-01T00: 00: 00,000", "LastCompromisedCheckOn": "2018-06-13T19: 28: 22,933","IsSupervised" ложь "DeviceMCC": { "SIMMCC": "", "CurrentMCC": ""}, "виртуальная память": 0, "IsDeviceDNDEnabled" ложь "IsDeviceLocatorEnabled" ложь "IsCloudBackupEnabled" ложь,"IsActivationLockEnabled" ложь "IsNetworkTethered" ложь "IsRoaming" ложь "SystemIntegrityProtectionEnabled" ложь "ProcessorArchitecture": 0, "Идентификатор": { "Значение": 140}, "UUID": "364243f97342b42879333-b942442313"},

Затем он повторяется с тем же форматом только для разных данных.Я попытался сделать что-то вроде (ast.literal_eval(b"myList")) (myList - это переменная, которая содержит все вышеперечисленное).

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Проблема с возвратом вашего API состоит в том, что это список и словарь из первого элемента, содержит некоторые поля как «false», но они не заключены в «» как строки, а python распознает только «False»,с заглавной F.

Таким образом, вы должны сначала преобразовать ответ в текст, затем заменить false на False, и в качестве последней точки используйте json.loads для использования Json в вашем коде: (где api_return - это то, что вы получаете)

response = str(api_return[0])
response.replace("false", "False")
response_json = json.loads(response)
0 голосов
/ 20 ноября 2018

Если возвращаемая строка является допустимой json, вы можете обработать ее следующим образом:

import json
x = json.loads(myList)

x будет содержать список словарей, возвращенных вызовом API.

ast.literal_eval(myList) также должно работать - если myList на самом деле имеет тип bytes, как вы указали, попробуйте ast.literal_eval(myList.decode('UTF-8'))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...