如何将Python字符串二进制表示转为JSON?解析报错解决方法
解决Python含二进制数据的字典转JSON及前端解析问题
问题根源
你遇到的两个错误本质是Python语法和JSON语法不兼容:
- JSON不支持Python的
b''二进制字面量语法,所以解析时会报错"Unexpected token 'b'" - JSON要求所有属性名必须用双引号,而你的原字符串用的是单引号,触发"Expected double-quoted property name"错误
另外,JSON本身不支持二进制数据类型,必须先把二进制转成字符串格式才能嵌入JSON。
解决步骤
1. 在Python端生成合法JSON
需要把二进制数据编码成base64字符串(通用的二进制转字符串方案),再用json.dumps()生成符合JSON规范的字符串:
import json import base64 # 原Python字典 raw_data = {'file_reference': b'\x04~\x9eaR\x00\x00\x00\x05e\xeb;~6t\x035\x95=\xf4D\xb4\xfc\xb4\x95>\x03\x10\xd4'} # 将二进制数据转成base64编码的字符串 raw_data['file_reference'] = base64.b64encode(raw_data['file_reference']).decode('utf-8') # 生成合法JSON字符串 valid_json = json.dumps(raw_data) print(valid_json)
执行后会输出类似这样的合法JSON:
{"file_reference": "BH+pemJSAAAAAWXrO342dDA1WT099E20/LSlTgwxDNQ="}
2. 前端解析JSON
拿到上面的valid_json字符串后,直接用JSON.parse()就能正常解析:
const jsonStr = '{"file_reference": "BH+pemJSAAAAAWXrO342dDA1WT099E20/LSlTgwxDNQ="}'; const data = JSON.parse(jsonStr); // 如果需要还原二进制数据,前端可以这样处理 const binaryStr = atob(data.file_reference); const uint8Array = new Uint8Array(binaryStr.length); for (let i = 0; i < binaryStr.length; i++) { uint8Array[i] = binaryStr.charCodeAt(i); } // uint8Array就是还原后的二进制数据
关键注意点
- 永远不要直接把Python的字典字符串(比如用
str()或repr()生成的)传给前端解析,因为那是Python语法,不是标准JSON - 二进制数据必须转成字符串格式(base64是最常用的选择)才能存入JSON
内容的提问来源于stack exchange,提问作者majar anar
相关产品推荐
相关产品推荐

