You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否无需转换为字符串,直接将二进制数据以字符串形式写入JSON?

直接将二进制数据作为字符串写入JSON不可行

别尝试直接把二进制数据当字符串塞进JSON里,大概率会踩坑:

  • 二进制数据里通常包含大量非UTF-8兼容的字节(比如ASCII控制字符、0x00空字节、超出ASCII范围的无效编码字节),而JSON规范要求字符串必须是有效的UTF-8编码。强行写入的话,要么序列化时直接报错,要么存储后出现乱码,读取时解析器无法正确还原数据,甚至直接崩溃。
  • 你提到的“只读写双引号间内容”完全不现实,JSON解析器会严格校验字符串内容的合法性,不是单纯把双引号里的内容原封不动读出来就算完。一旦遇到非法字符,解析器会直接抛出错误,根本不会返回你期望的二进制数据。

正确的做法还是用你已经了解的Base64编码:把二进制数据转成由ASCII可打印字符组成的字符串,这样完全符合JSON字符串的要求,序列化和反序列化过程都不会有问题,还能保证数据完整无损。

举个简单的Python例子对比:

import json
import base64

# 二进制数据
binary_data = b'\x00\xFF\x7F\x80'

# 错误做法:直接转字符串存JSON
try:
    json_str = json.dumps({"data": str(binary_data, 'latin-1')})
    loaded = json.loads(json_str)
    # 读取时用utf-8解码会报错
    restored = loaded["data"].encode('utf-8')
except UnicodeDecodeError as e:
    print(f"错误:{e}")

# 正确做法:用Base64
base64_str = base64.b64encode(binary_data).decode('utf-8')
json_str = json.dumps({"data": base64_str})
loaded = json.loads(json_str)
restored = base64.b64decode(loaded["data"])
print(f"还原后的数据:{restored}")  # 输出 b'\x00\xff\x7f\x80',和原数据一致

内容的提问来源于stack exchange,提问作者Zebrafish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:55:55