Ваш bytesоб'єкт є майже JSON, але він використовує одинарні лапки замість подвійних лапок, і це повинен бути рядок. Таким чином , один з способів виправити це є для декодування , bytesщоб strі замінити лапки. Інший варіант - використання ast.literal_eval; докладніше див. нижче. Якщо ви хочете роздрукувати результат або зберегти його у файлі як дійсний JSON, ви можете завантажити JSON до списку Python, а потім скинути його. Наприклад,
import json
my_bytes_value = b'[{\'Date\': \'2016-05-21T21:35:40Z\', \'CreationDate\': \'2012-05-05\', \'LogoType\': \'png\', \'Ref\': 164611595, \'Classe\': [\'Email addresses\', \'Passwords\'],\'Link\':\'http://some_link.com\'}]'
my_json = my_bytes_value.decode('utf8').replace("'", '"')
print(my_json)
print('- ' * 20)
data = json.loads(my_json)
s = json.dumps(data, indent=4, sort_keys=True)
print(s)
вихід
[{"Date": "2016-05-21T21:35:40Z", "CreationDate": "2012-05-05", "LogoType": "png", "Ref": 164611595, "Classe": ["Email addresses", "Passwords"],"Link":"http://some_link.com"}]
- - - - - - - - - - - - - - - - - - - -
[
{
"Classe": [
"Email addresses",
"Passwords"
],
"CreationDate": "2012-05-05",
"Date": "2016-05-21T21:35:40Z",
"Link": "http://some_link.com",
"LogoType": "png",
"Ref": 164611595
}
]
Як зазначає Антті Хаапала в коментарях, ми можемо використати ast.literal_eval для перетворення my_bytes_valueв список Python, як тільки ми розшифруємо його до рядка.
from ast import literal_eval
import json
my_bytes_value = b'[{\'Date\': \'2016-05-21T21:35:40Z\', \'CreationDate\': \'2012-05-05\', \'LogoType\': \'png\', \'Ref\': 164611595, \'Classe\': [\'Email addresses\', \'Passwords\'],\'Link\':\'http://some_link.com\'}]'
data = literal_eval(my_bytes_value.decode('utf8'))
print(data)
print('- ' * 20)
s = json.dumps(data, indent=4, sort_keys=True)
print(s)
Як правило, ця проблема виникає через те, що хтось зберігає дані, друкуючи її Python, reprзамість того, щоб використовувати jsonмодуль для створення належних даних JSON. Якщо це можливо, краще вирішити цю проблему, щоб спочатку створювалися належні дані JSON.