我正在尝试使用 Construct2.9 库序列化解析一些二进制数据的输出。我想将结果序列化为 JSON。
packet
是 Construct 类的实例Container
.
显然它包含一个隐藏的_io
类型的BytesIO
- 查看输出dict(packet)
below:
{
'packet_length': 76, 'uart_sent_time': 1, 'frame_number': 42958,
'subframe_number': 0, 'checksum': 33157, '_io': <_io.BytesIO object at 0x7f81c3153728>,
'platform':661058, 'sync': 506660481457717506, 'frame_margin': 20642,
'num_tlvs': 1, 'track_process_time': 593, 'chirp_margin': 78,
'timestamp': 2586231182, 'version': 16908293
}
现在,打电话json.dumps(packet)
显然会导致类型错误:
...
File "/usr/lib/python3.5/json/__init__.py", line 237, in dumps
**kw).encode(obj)
File "/usr/lib/python3.5/json/encoder.py", line 198, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python3.5/json/encoder.py", line 256, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python3.5/json/encoder.py", line 179, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <_io.BytesIO object at 0x7f81c3153728> is not JSON serializable
然而我感到困惑的是,跑步json.dumps(packet, skipkeys=True)
导致完全相同的错误,而我希望它跳过_io
场地。这里有什么问题?为什么是skipkeys
不允许我跳过_io
field?
我通过重写让代码可以工作JSONEncoder
并返回None
对于领域BytesIO
类型,但这意味着我的序列化字符串包含大量"_io": null
元素,我根本不想拥有......