我做了一个字节数组,并将其写入到一个JSON文件中。这是可行的,但我希望有一个格式化的JSON文件,而不是大量的文本墙。
我尝试过用utf-8解码字节数组,但是得到的是UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
。我的计划是用json.dumps()格式化这个字符串。
尝试json.dumps()而不使用任何其他格式,结果如下:TypeError: Object of type bytearray is not JSON serializable
content = bytearray()
content_idx = 0
try:
with open(arguments.input_file, 'rb') as input_file:
while (byte:=input_file.read(1)):
content += bytes([ord(byte) ^ xor_key[content_idx % (len(xor_key))]])
content_idx += 1
except (IOError, OSError) as exception:
print('Error: could not read input file')
exit()
try:
with open(arguments.output_file, 'wb') as output_file:
output_file.write(json.dumps(content.decode('utf-8'), indent=4))
except (IOError, OSError) as exception:
print('Error: could not create output file')
exit()
2条答案
按热度按时间zfycwa2u1#
错误是您试图传递then字节,而
json.dumps()
试图以某种方式将它们序列化,但不能,这被写入错误输出中。要将文件保存为JSON格式,需要将字节流转换为Python字典,该字典已经完全接受JSON,没有任何问题。
如果您可以显示输入数据的外观以及要保存到JSON的内容,这将有所帮助
Python有一个现成的Base64库,它可以将字节数组转换为字符串,还有here's an example usage article。但是,当将字符串解析到字典中时,问题可能会出现,所以我建议您搜索一下有哪些库可以进行这种解析,否则您可以使用正则表达式
abithluo2#
JSON编码器和解码器可以扩展为支持其他类型。这里有一种支持字节字符串的方法,将其转换为BASE64
str
,并使用特殊键将其序列化为dict
。该键用于标记解码器,以将具有该键的JSON对象转换回字节字符串。输出量: