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

如何将Flask中的对象列表转为JSON发送至React前端

将查询结果转为JSON并发送至React前端的问题

我曾查阅过类似问题的解决方案,但均未奏效。以下是我的查询代码:

results = (
   db.session(TestInfo.test, TestInfo.test_regime_name, StandardResult.cell_id)
   .select_from(TestInfo)
   .join(StandardResult, TestInfo.test==StandardResult.test)
   .distinct(StandardResult.cell_id)
   .all()
)

由于数据来自设备,两张表无预设关联关系,我只能手动关联。这个查询返回的是不含列名的元组列表,于是我用以下代码处理成带键的字典列表:

response = [row._mapping for row in results]

处理后得到的格式如下:

[{'test': '2514', 'test_regime_name': '4695 XX XXX', 'cell_id': '000123456'}, {...}, {...}, ...]

现在我卡在了如何把这个字典列表转为JSON并发送给React前端这一步。


解决办法

后端处理(以Flask为例)

如果你的后端用的是Flask,直接用内置的jsonify方法就能把字典列表转为符合标准的JSON响应:

from flask import jsonify

# 假设这是你的API路由
@app.route('/api/test-data')
def get_test_data():
    # 执行查询和处理逻辑
    results = (
       db.session(TestInfo.test, TestInfo.test_regime_name, StandardResult.cell_id)
       .select_from(TestInfo)
       .join(StandardResult, TestInfo.test==StandardResult.test)
       .distinct(StandardResult.cell_id)
       .all()
    )
    response = [row._mapping for row in results]
    return jsonify(response)

如果是普通Python环境(非Flask),可以用json模块手动序列化,同时设置正确的响应头:

import json
from http.server import BaseHTTPRequestHandler

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 执行查询和处理逻辑
        results = (
           db.session(TestInfo.test, TestInfo.test_regime_name, StandardResult.cell_id)
           .select_from(TestInfo)
           .join(StandardResult, TestInfo.test==StandardResult.test)
           .distinct(StandardResult.cell_id)
           .all()
        )
        response = [row._mapping for row in results]
        json_data = json.dumps(response)
        self.send_response(200)
        self.send_header('Content-Type', 'application/json')
        self.end_headers()
        self.wfile.write(json_data.encode('utf-8'))

前端React接收数据

React端可以用fetch或者axios来请求并处理数据:

用fetch的示例:

import { useEffect, useState } from 'react';

function TestDataComponent() {
    const [data, setData] = useState([]);

    useEffect(() => {
        fetch('/api/test-data')
            .then(res => res.json())
            .then(data => setData(data))
            .catch(err => console.log('请求出错:', err));
    }, []);

    return (
        <div>
            {data.map(item => (
                <div key={item.cell_id}>
                    <p>测试编号: {item.test}</p>
                    <p>测试方案: {item.test_regime_name}</p>
                    <p>单元ID: {item.cell_id}</p>
                </div>
            ))}
        </div>
    );
}

export default TestDataComponent;

用axios的示例:
先安装axios:npm install axios,再编写组件:

import { useEffect, useState } from 'react';
import axios from 'axios';

function TestDataComponent() {
    const [data, setData] = useState([]);

    useEffect(() => {
        axios.get('/api/test-data')
            .then(res => setData(res.data))
            .catch(err => console.log('请求出错:', err));
    }, []);

    return (
        <div>
            {data.map(item => (
                <div key={item.cell_id}>
                    <p>测试编号: {item.test}</p>
                    <p>测试方案: {item.test_regime_name}</p>
                    <p>单元ID: {item.cell_id}</p>
                </div>
            ))}
        </div>
    );
}

export default TestDataComponent;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:17:02