如何将Node.js接收的Python stdout Buffer数组转为JSON/字符串?
解决前端获取到Buffer格式数据的问题
问题根源是Node.js后端直接将child_process输出的Buffer对象传入了res.json(),JSON序列化时会把Buffer转换成{type: 'Buffer', data: Array(...)}的结构,导致前端无法直接使用原始JSON数据。
修复方案(Node.js后端修改)
需要先将Buffer转换为字符串,再解析为JSON对象后返回给前端;同时要考虑stdout分块输出的情况,需拼接所有输出块后再处理:
app.get('/records', (req, res) => { const { spawn } = require('child_process'); const pyProg = spawn('python', ['script.py']); let rawOutput = ''; // 收集所有输出块 pyProg.stdout.on('data', (chunk) => { rawOutput += chunk.toString(); }); // 进程结束后处理完整输出 pyProg.on('close', (exitCode) => { if (exitCode !== 0) { return res.json({ success: false, error: `Python脚本执行失败,退出码:${exitCode}` }); } try { // 将字符串解析为JSON对象 const jsonData = JSON.parse(rawOutput); res.json({ success: true, data: jsonData }); } catch (parseErr) { res.json({ success: false, error: `JSON解析失败:${parseErr.message}` }); } }); // 捕获Python脚本的错误输出 pyProg.stderr.on('data', (errData) => { console.error('Python脚本错误输出:', errData.toString()); }); });
前端代码调整(可选)
如果后端返回的是已经解析好的JSON对象,前端无需额外转换,直接使用response.data即可:
fetch('/records') .then((response) => response.json()) .then((response) => { if (response.success && response.data) { console.log(response.data); // 直接使用response.data中的数据 } else { console.error('请求失败:', response.error); } }) .catch(fetchErr => console.error('网络请求错误:', fetchErr));
补充说明
- 若Python脚本输出的JSON存在格式问题(如多余换行、空格),
JSON.parse会抛出错误,需检查Python端json.dumps的输出是否标准。 - 必须等待Python进程完全结束后再处理输出,避免因分块输出导致的JSON不完整问题。
内容的提问来源于stack exchange,提问作者JoN
相关产品推荐
相关产品推荐

