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

Flask服务端返回JSON被转义为字符串 前端接收异常如何解决?

问题原因
  • 返回数据中存在JSON标准不支持的NaN类型(示例中Ex-Dividend Date字段值为nan),序列化时会触发特殊转义逻辑
  • 直接返回字典或json.dumps处理后的字符串时,Flask默认会设置响应头Content-Type: text/html,前端会将响应内容识别为普通字符串,不会自动解析为JSON对象,因此会看到带转义符的字符串结果
  • 若使用旧版本Flask,直接返回字典不会自动触发jsonify处理,也会导致返回纯文本格式的序列化结果
解决方案
  1. 先处理数据中的NaN值,转换为JSON兼容的空值(如None)
  2. 统一使用Flask提供的jsonify方法返回数据,它会自动设置正确的application/json响应头,同时自动完成Python类型到JSON类型的转换

修改后的接口代码

import numpy as np
from flask import jsonify

@app.route('/dev/api/stock/price/<symbol>', methods=['GET'])
@cross_origin(origin='*')
def get_stock_price(symbol):
    quote = si.get_quote_table(symbol)
    quote['price'] = si.get_live_price(symbol)
    
    # 处理NaN值,转换为JSON兼容的None
    processed_quote = {}
    for k, v in quote.items():
        if isinstance(v, float) and np.isnan(v):
            processed_quote[k] = None
        else:
            processed_quote[k] = v
    
    print(processed_quote)
    return jsonify(processed_quote)
前端补充检查

如果修改后还是拿到字符串,检查前端请求逻辑:

  • 使用fetch请求时,必须调用response.json()解析响应,不要用response.text()
  • 使用axios等请求库时,确认没有手动覆盖responseType为text类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:45:07