【问题标题】:Parse all bytearray values in a JSON in Python在 Python 中解析 JSON 中的所有字节数组值
【发布时间】:2019-02-13 05:21:01
【问题描述】:

我有一个复杂的对象,它有一些 bytearray 类型的属性,当我尝试将它转换为 JSON 时,它会抛出这个错误:

TypeError: bytearray 类型的对象不是 JSON 可序列化的。

我可以对我知道的 bytearray 类型的属性进行硬编码,然后执行以下操作:

bytes(key.key_value).decode("utf-8")

问题是我有很多可能的情况,我想创建一个通用方法,允许我将 JSON 的所有 bytearray 属性解析为 string。 我尝试制作自己的json.JSONEncoder 实现,但没有成功。有什么建议吗?提前致谢!

【问题讨论】:

  • 基本上这在 json 中是不支持的。加载数据时如何区分字节数组和字符串?
  • @wim 我不在乎,因为我只想在控制台中显示解码后的值
  • 好的,这样就不需要再加载json了?您只是希望 bytearray 在输出中看起来像一个字符串?
  • @wim 是的!这正是我想要的。

标签: python arrays json python-3.x


【解决方案1】:

决定要用于将字节数组解码为字符串的编码和错误处理行为,然后:

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 可序列化的。但是,我让它与我想出的另一个解决方案一起工作。还是谢谢!
猜你喜欢
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 2018-04-13
相关资源
最近更新 更多