web-dev-qa-db-fra.com

Comment encoder des octets en JSON? json.dumps () lançant une TypeError

J'essaie d'encoder un dictionnaire contenant une chaîne d'octets avec json et d'obtenir un is not JSON serializable error.

Exemple de code:

import base64
import json

data={}
encoded = base64.encodebytes(b'data to be encoded')
data['bytes']=encoded

print(json.dumps(data))

L'erreur que je reçois:

TypeError: b'ZGF0YSB0byBiZSBlbmNvZGVk\n' is not JSON serializable

Comment puis-je encoder correctement mon dictionnaire contenant des octets avec JSON?

18
Fanta

Le format JSON ne prend en charge que chaînes unicode. Étant donné que Base64 code les octets en octets ASCII uniquement, vous pouvez utiliser ce codec pour décoder les données:

encoded = base64.encodestring(b'data to be encoded')
data['bytes'] = encoded.decode('ascii')
25
Martijn Pieters