【问题标题】:Server always sending data as an escaped character string服务器始终将数据作为转义字符串发送
【发布时间】:2021-12-04 03:24:34
【问题描述】:

我有这段代码,无论我是return jsonify(quote) 还是return quote,它仍然在Javascript 前端作为转义字符串结束。 json.dumps() 似乎也没有做任何事情。我是一名 js 开发人员……不知道为什么 Python 会涉及这么简单的事情。解决办法是什么?

@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)

    print(quote)

    return quote

报价的打印输出是

{'1y Target Est': 700.3, '52 Week Range': '379.11 - 900.40', 'Ask': '849.30 x 900', 'Avg. Volume': 18457193.0, 'Beta (5Y Monthly)': 1.89, 'Bid': '849.00 x 800', "Day's Range": '822.35 - 843.21', 'EPS (TTM)': 1.9, 'Earnings Date': 'Oct 20, 2021', 'Ex-Dividend Date': nan, 'Forward Dividend & Yield': 'N/A (N/A)', 'Market Cap': '844.522B', 'Open': 823.74, 'PE Ratio (TTM)': 444.4, 'Previous Close': 818.32, 'Quote Price': 843.030029296875, 'Volume': 18924617.0, 'price': 843.030029296875}

在客户端是这样接收的

data: "{\"1y Target Est\": 700.3, \"52 Week Range\": \"379.11 - 900.40\", \"Ask\": \"849.30 x 900\", \"Avg. Volume\": 18457193.0, \"Beta (5Y Monthly)\": 1.89, \"Bid\": \"849.00 x 800\", \"Day's Range\": \"822.35 - 843.21\", \"EPS (TTM)\": 1.9, \"Earnings Date\": \"Oct 20, 2021\", \"Ex-Dividend Date\": NaN, \"Forward Dividend & Yield\": \"N/A (N/A)\", \"Market Cap\": \"844.522B\", \"Open\": 823.74, \"PE Ratio (TTM)\": 444.4, \"Previous Close\": 818.32, \"Quote Price\": 843.030029296875, \"Volume\": 18924617.0, \"price\": 843.030029296875}"

【问题讨论】:

  • 这看起来像是数据表示的问题。如何在客户端打印?
  • 暂时忘记客户端。浏览器输出是什么样的?那么卷曲呢?
  • 另外,不清楚si.get_quote_table() 实际返回的内容。这是字典还是其他类?打印或返回并没有告诉我们这个......如果你真的是一个 JS 开发者,那么也许切换到 Express 或 NextJS?
  • @OneCricketeer 我会回来更新输出...但是想到在 JS 中执行此操作...这是我正在构建的量化金融应用程序...本质上是衍生品自动化平台,因此后端必须使用 Python。 JS 没有对应用例的包。
  • 如果没有一些不起眼的 NPM 模块来进行财务计算,我会感到惊讶。当然,JS 没有 Pandas,但这并不意味着它不能做其他所有事情。 finance.js 可以自行查找股票代码并返回 JS 对象

标签: python json flask


【解决方案1】:

所以问题是我忘记了我在客户端发生了 axios 转换,我认为这是问题的主要驱动因素。后端还添加了一些数据格式。

 try {
    // const response = await api.post(path, obj, { transformResponse: [] });
    const response = await api.post(path, obj); // Correct
    return response;
  }

后端改成这个

@app.route("/dev/api/stock/price/<symbol>", methods=["GET"])
@cross_origin(origin="*")
def get_stock_price(symbol):
    quote = si.get_quote_table(symbol)
    obj = {}

    for key in quote:
        _key = key.replace(" ", "_")
        obj[_key] = (
            "" if type(quote[key]) is float and math.isnan(quote[key]) else quote[key]
        )
    return jsonify(obj)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多