如何通过Node.js API将Python类实例输出为JSON至本地链接?
问题解决:让localhost页面显示Python类实例的JSON内容
一、修复Python代码的问题
- 补全语法错误:
myClassJson = json.loads(toJSON(myClass))末尾缺少右括号 - 简化JSON生成逻辑:无需先转JSON再解析为字典,直接使用
toJSON返回的标准JSON字符串,避免生成非标准格式。修改后的核心代码:import json import sys def toJSON(obj): return json.dumps(obj, default=lambda o: o.__dict__, sort_keys=True, indent=4) if __name__ == '__main__': # 假设myClass是已实例化的类对象 myClassJsonStr = toJSON(myClass) sys.stdout.write(myClassJsonStr) sys.stdout.flush() - 修正变量名错误:原代码中
sys.stdout.write(buildingJsonStr)的buildingJsonStr应为myClassJsonStr,或直接使用toJSON的返回值 - 禁止用
str(myClassJson)转换:该操作会生成带单引号的Python风格字符串,不是合法JSON,导致Node无法解析
二、修复Node.js/TypeScript代码的问题
问题核心是当前代码未完整收集Python输出数据,且未将有效数据返回给API客户端。修正后的代码示例(以Express框架为例):
import { spawn } from 'child_process'; import express from 'express'; const app = express(); const fetchPythonData = (): Promise<any> => { return new Promise((resolve, reject) => { // 替换为你的Python脚本路径 const pyProcess = spawn('python', ['./your-python-script.py']); let rawOutput = ''; // 收集所有分块输出的数据 pyProcess.stdout.on('data', (chunk: Buffer) => { rawOutput += chunk.toString('utf-8'); }); // 捕获Python脚本的错误输出 pyProcess.stderr.on('data', (err) => { reject(`Python执行错误: ${err.toString()}`); }); // 进程结束后解析完整数据 pyProcess.on('close', (exitCode) => { if (exitCode !== 0) { reject(`Python进程异常退出,退出码: ${exitCode}`); return; } try { const parsedData = JSON.parse(rawOutput); resolve(parsedData); } catch (parseError) { reject(`JSON解析失败: ${parseError.message}, 原始输出: ${rawOutput}`); } }); }); }; // 定义API路由,返回Python生成的JSON数据 app.get('/api/class-data', async (req, res) => { try { const classData = await fetchPythonData(); res.json(classData); // 将数据返回给前端页面 } catch (error) { res.status(500).json({ error: String(error) }); } }); // 启动服务 app.listen(3000, () => { console.log('服务运行在 http://localhost:3000'); });
三、关键验证步骤
- 单独运行Python脚本,检查终端输出是否为纯标准JSON,无多余打印内容
- 启动Node服务后,访问
http://localhost:3000/api/class-data,确认页面显示正确的类实例JSON内容 - 若仍有问题,查看Node终端的错误日志,排查JSON解析或进程调用问题
内容的提问来源于stack exchange,提问作者ArieAI
相关产品推荐
相关产品推荐

