У меня есть сложный объект, который имеет некоторые свойства типа bytearray, и когда я пытаюсь преобразовать его в JSON, он выдает эту ошибку:
TypeError: Object of type bytearray is not JSON serializable.
Я могу сделать метод, жестко кодирующий свойства, которые, как я знаю, относятся к типу bytearray, а затем сделать следующее:
bytes(key.key_value).decode("utf-8")
Проблема в том, что у меня много возможных случаев, и я хотел бы создать общий метод, который позволяет мне анализировать все свойства bytearray JSON на string.
Я пытался создать свою собственную реализацию json.JSONEncoder, но это не сработало. Любое предложение? Заранее спасибо!
@wim Меня не волнует, так как я хочу показать только декодированное значение в консоли
ОК, значит, вам не нужно снова загружать json? Вы просто хотите, чтобы bytearray выглядел как строка на выходе?
@wim Да! Это именно то, что я хочу.






Определитесь с поведением кодирования и обработки ошибок, которое вы хотите использовать для декодирования байтовых массивов в строки, а затем:
import json
class FunkyJSONEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, bytearray):
return obj.decode("utf-8", errors = "replace")
else:
return super().default(obj)
Пример использования:
>>> dumps = FunkyJSONEncoder().encode
>>> dumps({'k': bytearray(b'potato')})
'{"k": "potato"}'
Это не сработало: TypeError: объект типа MyType не сериализуемый JSON. Однако я заставил это работать с другим решением, которое придумал. Спасибо, в любом случае!
В основном это просто не поддерживается в json. Как вы отличите байтовые массивы от строк при загрузке данных?