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

如何通过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');
});

三、关键验证步骤

  1. 单独运行Python脚本,检查终端输出是否为纯标准JSON,无多余打印内容
  2. 启动Node服务后,访问http://localhost:3000/api/class-data,确认页面显示正确的类实例JSON内容
  3. 若仍有问题,查看Node终端的错误日志,排查JSON解析或进程调用问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:10:32