踩大坑:json格式存储wav二进制内容
- 手机
- 2025-08-20 02:21:02

需求描述:
需要将wav音频文件以二进制的形式读出,存放到 json 中,发送post请求到服务,服务解析json,得到二进制内容后放进ASR模型得出转录结果。
记一次坑: # 将wav以二进制形式读出存放到json中 f = open("zh_test_16k.wav","rb+") content = f.read() request_dict['audio'] = str(content) with open('request.json', 'w') as file: file.write(json.dumps(request_dict)) f.close()通过 curl管道传输request.json中的内容 (网上的命令杂七杂八,记录正确命令为 -X -d参数房放前面,url放后面,且url用引号)
curl -X POST -d @request64.json --header “Content-Type:application/json” ‘localhost:7000/foundry_module/executor?executor=api_executor&module=asr_uni’
# 从服务端得到数据 datas = self.rfile.read(int(self.headers['content-length'])) datas = json.loads(datas) wav_content = datas["audio"].encode()encode():str转为bytes decode():bytes转为str
wav_content # type(wav_content)= bytes f = open("zh_test_16k.wav","rb+") content = f.read() # type(content)= bytes if(wav_content==content): print("相等")始终不能输出"相等",此时已经快调疯了
解决办法先将二进制内容通过base64编码
# import foundry; import base64; import hashlib; import json encoded = base64.b64encode(open('zh_test_16k.wav', 'rb').read()); #decoded = base64.b64decode(encoded) request_dict = {} f = open('zh_test_16k.wav','rb+') sound_wav_rb = f.read() request_dict['audio'] = str(encoded) request_dict['audio_format'] = 0 request_dict['sample_rate'] = 0 request_dict['lang'] = 0 with open('request64.json', 'w') as file: file.write(json.dumps(request_dict)) f.close()传输request64.json文件内容
curl -X POST -d @request64.json --header “Content-Type:application/json” ‘localhost:7000/foundry_module/executor?executor=api_executor&module=asr_uni’
字符串截取base64编码不包含’b’ 和引号的内容,再解码,最后放入模型
datas = self.rfile.read(int(self.headers['content-length'])) datas = json.loads(datas) wav_content = datas["audio"][2:-1] wav_content = base64.b64decode(wav_content) 踩坑原因json存在编译格式的问题,会导致原二进制文件内容多加 ”/“,因此不与原wav文件的二进制内容一致
下次不要直接以二进制读的方式,将内容存到json中了!
踩大坑:json格式存储wav二进制内容由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“踩大坑:json格式存储wav二进制内容”