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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:10:33