Конвертировать байты строки списка в JSON - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть байтовый объект Python из строки списка с именем bytes_start, и я хочу превратить его в объект JSON.

bytes_start = b'"[{\\"method\\": \\"NULLABLE\\", \\"title\\": \\"Customer\\", \\"type\\": \\"STRING\\"}, {\\"method\\": \\"NULLABLE\\", \\"title\\": \\"Vendor\\", \\"type\\": \\"INTEGER\\"}]"'

Я пытался использовать new_bytes_start = json.dumps(bytes_start), но это не сработало,Как я могу использовать Python 3, чтобы получить следующий результат?

new_bytes_start = [{"method": "NULLABLE", "title": "Customer", "type": "INTEGER"}, {"method": "NULLABLE", "title": "Vendor", "type": "FLOAT"}]

1 Ответ

0 голосов
/ 20 сентября 2019

Ваше значение в байтах содержит кодированный в двойном формате документ JSON.Вам не нужно кодировать это в третий раз.

Если вы хотите загрузить данных в объект Python, вам нужно декодировать JSON, дважды , используя json.loads():

import json

new_bytes_start = json.loads(json.loads(bytes_start))

Демо:

>>> import json
>>> bytes_start = b'"[{\\"method\\": \\"NULLABLE\\", \\"title\\": \\"Customer\\", \\"type\\": \\"STRING\\"}, {\\"method\\": \\"NULLABLE\\", \\"title\\": \\"Vendor\\", \\"type\\": \\"INTEGER\\"}]"'
>>> json.loads(bytes_start)
'[{"method": "NULLABLE", "title": "Customer", "type": "STRING"}, {"method": "NULLABLE", "title": "Vendor", "type": "INTEGER"}]'
>>> json.loads(json.loads(bytes_start))
[{'method': 'NULLABLE', 'title': 'Customer', 'type': 'STRING'}, {'method': 'NULLABLE', 'title': 'Vendor', 'type': 'INTEGER'}]

Если вы используете версию Python старше Python 3.6, вам также придетсясначала декодировать строку байта;предположительно это UTF-8, в какой момент вы будете использовать:

new_bytes_start = json.loads(json.loads(bytes_start.decode('utf8')))
...