How to encode bytes in JSON? json.dumps() throwing a TypeError
Question:
I am trying to encode a dictionary containing a string of bytes with json
, and getting a is not JSON serializable error
:
import base64
import json
data = {}
encoded = base64.b64encode(b'data to be encoded')
data['bytes'] = encoded
print(json.dumps(data))
The error I get:
TypeError: b'ZGF0YSB0byBiZSBlbmNvZGVkn' is not JSON serializable
How can I correctly encode my dictionary containing bytes with JSON?
Answers:
The JSON format only supports unicode strings. Since base64.b64encode
encodes bytes to ASCII-only bytes, you can use that codec to decode the data:
import base64
encoded = base64.b64encode(b'data to be encoded') # b'ZGF0YSB0byBiZSBlbmNvZGVk' (notice the "b")
data['bytes'] = encoded.decode('ascii') # 'ZGF0YSB0byBiZSBlbmNvZGVk'
Note that to get the original data back you don’t need to re-encode it to bytes because b64decode
handles ASCII-only strings as well as bytes:
decoded = base64.b64decode(data['bytes']) # b'data to be encoded'
I am trying to encode a dictionary containing a string of bytes with json
, and getting a is not JSON serializable error
:
import base64
import json
data = {}
encoded = base64.b64encode(b'data to be encoded')
data['bytes'] = encoded
print(json.dumps(data))
The error I get:
TypeError: b'ZGF0YSB0byBiZSBlbmNvZGVkn' is not JSON serializable
How can I correctly encode my dictionary containing bytes with JSON?
The JSON format only supports unicode strings. Since base64.b64encode
encodes bytes to ASCII-only bytes, you can use that codec to decode the data:
import base64
encoded = base64.b64encode(b'data to be encoded') # b'ZGF0YSB0byBiZSBlbmNvZGVk' (notice the "b")
data['bytes'] = encoded.decode('ascii') # 'ZGF0YSB0byBiZSBlbmNvZGVk'
Note that to get the original data back you don’t need to re-encode it to bytes because b64decode
handles ASCII-only strings as well as bytes:
decoded = base64.b64decode(data['bytes']) # b'data to be encoded'