Flask服务端返回JSON被转义为字符串 前端接收异常如何解决?
问题原因
- 返回数据中存在JSON标准不支持的
NaN类型(示例中Ex-Dividend Date字段值为nan),序列化时会触发特殊转义逻辑 - 直接返回字典或
json.dumps处理后的字符串时,Flask默认会设置响应头Content-Type: text/html,前端会将响应内容识别为普通字符串,不会自动解析为JSON对象,因此会看到带转义符的字符串结果 - 若使用旧版本Flask,直接返回字典不会自动触发
jsonify处理,也会导致返回纯文本格式的序列化结果
解决方案
- 先处理数据中的
NaN值,转换为JSON兼容的空值(如None) - 统一使用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
相关产品推荐
相关产品推荐

