In Python 3, they removed byte
support in json
. (Source: https://bugs.python.org/issue10976).
A possible workaround is:
import json
data = {"foo": "bar", "bar": b"foo"}
# decode the `byte` into a unicode `str`
data["bar"] = data["bar"].decode("utf8")
# `data` now contains
#
# {'bar': 'foo', 'foo': 'bar'}
#
# `json_encoded_data` contains
#
# '{"bar": "foo", "foo": "bar"}'
#
json_encoded_data = json.dumps(data)
# `json_decoded_data` contains
#
# {'bar': 'foo', 'foo': 'bar'}
#
json_decoded_data = json.loads(data)
# `data` now contains
#
# {'bar': b'foo', 'foo': 'bar'}
#
data["bar"] = data["bar"].encode("utf8")
If you don't have a constraint of using json
, you might consider using bson
(Binary JSON):
import bson
data = {"foo": "bar", "bar": b"foo"}
# `bson_encoded_data` contains
#
# b'\x1f\x00\x00\x00\x05bar\x00\x03\x00\x00\x00\x00foo\x02foo\x00\x04\x00\x00\x00bar\x00\x00'
#
bson_encoded_data = bson.BSON.encode(data)
# `bson_decoded_data` contains
#
# {'bar': b'foo', 'foo': 'bar'}
#
bson_decoded_data = bson.BSON.decode(data)