Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用base64获取JSON的二进制输入和输出_Python_Json_Python 3.x_Base64 - Fatal编程技术网

Python 使用base64获取JSON的二进制输入和输出

Python 使用base64获取JSON的二进制输入和输出,python,json,python-3.x,base64,Python,Json,Python 3.x,Base64,我已经构建了两个解析器,除了一些二进制块之外,它们可以处理所有的事情。一个从专有格式转换为标准json,另一个从json转换回专有格式 当我写了一篇关于json的文章时,我很高兴能把它全部解析成有效的json,但担心我可能无法把二进制部分带回来,而这种担心似乎已经实现了 我认为base64是必要的,或者是一种可能的解决方案,因为二进制文件中的字符太多,json不喜欢这些字符,我认为尝试转义这些字符比base64解决方案更具挑战性 这是原始文件中的一个二进制块: cleanbinary = "0\

我已经构建了两个解析器,除了一些二进制块之外,它们可以处理所有的事情。一个从专有格式转换为标准json,另一个从json转换回专有格式

当我写了一篇关于json的文章时,我很高兴能把它全部解析成有效的json,但担心我可能无法把二进制部分带回来,而这种担心似乎已经实现了

我认为base64是必要的,或者是一种可能的解决方案,因为二进制文件中的字符太多,json不喜欢这些字符,我认为尝试转义这些字符比base64解决方案更具挑战性

这是原始文件中的一个二进制块:

cleanbinary = "0\x82\x02\xd80\x82\x01\xc0\xa0"
它被带入base64,如下所示:

import base64    
out = base64.encodebytes(cleanbinary.encode('utf-8'))
print(out)
>> b'MMKCAsOYMMKCAcOAwqA=\n'
您可以将其转换回二进制:

z = base64.decodebytes(out).decode('utf-8')
print(z == cleanbinary)
>> True
它在中间需要一个步骤,但是我无法在中间的循环中把它变成JSON。已尝试以下方法:

wrapped = '"' + str(out) + '"'
现在你有了json需要的双引号,它是一个
str
,而不是
bytes

print(wrapped)
>> '"b\'MMKCAsOYMMKCAcOAwqA=\\n\'"'
现在让我们假设您使用Python的json解析器从json文件中提取了这个字符串值。如何将其转换回字节值:

b'MMKCAsOYMMKCAcOAwqA=\n'

…这样就可以解析回二进制?

我建议将字节转换成字符串,然后通过显式解码和编码返回:

out = b'MMKCAsOYMMKCAcOAwqA='

wrapped = f'"{out.decode()}"'
print(wrapped)     # ---> "MMKCAsOYMMKCAcOAwqA="

unwrapped = wrapped.strip('"').encode()
print(unwrapped)   # ---> b'MMKCAsOYMMKCAcOAwqA='
最简单的方法(可能不是最好的方法)是使用
字节(“一些文本”)