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

如何将TradingView Webhook发送的纯文本数据转为Flask可解析的JSON

解决方案:TradingView Webhook 纯文本转JSON解析问题

核心问题分析

你的请求存在两个语法错误,导致无法直接解析为JSON:

  1. 错误使用**数组括号[]**包裹键值对结构,JSON对象必须用大括号{}
  2. {{ticker}}被替换为裸字符串(如BTCUSDT),没有双引号包裹,不符合JSON字符串格式要求

方案1:修改TradingView Webhook模板(推荐)

直接在TradingView里修正模板,生成合法的JSON格式文本,这是最可靠的方式:

{
    "tradeid": "5L5A0",
    "message": "",
    "accountid": 20,
    "ticker": "{{ticker}}",
    "currentprice": {{close}},
    "action": "X_OPEN"
}
  • 把外层的[]替换为{},明确是JSON对象
  • 给{{ticker}}加上双引号,确保替换后字符串符合JSON规范
  • {{close}}是数字类型,不需要引号

修改后,Flask端直接用request.get_json()就能正常解析:

@tview_api.route('/record_alerts', methods=['GET', 'POST'])
def save_tview_alerts():
    try:
        req_data = request.get_json()
        # 后续业务逻辑处理
        return {"status": "success"}, 200
    except Exception as e:
        return {"status": "error", "msg": str(e)}, 400

方案2:Flask端强制修正非法文本(应急方案)

如果无法修改TradingView模板,可在后端对原始文本进行语法修复后再解析:

import re
import json

@tview_api.route('/record_alerts', methods=['GET', 'POST'])
def save_tview_alerts():
    try:
        # 读取原始二进制数据并转成字符串
        raw_text = request.data.decode('utf-8')
        # 1. 替换错误的数组括号为对象大括号
        fixed_text = raw_text.replace('[', '{').replace(']', '}')
        # 2. 给ticker后的裸字符串添加双引号
        # 正则匹配:"ticker": 后面的非空白、非引号、非逗号内容
        fixed_text = re.sub(r'(?<="ticker":\s*)([^\s",]+)', r'"\1"', fixed_text)
        # 3. 解析为JSON对象
        req_data = json.loads(fixed_text)
        
        # 后续业务逻辑
        return {"status": "success", "data": req_data}, 200
    except json.JSONDecodeError as e:
        return {"status": "error", "msg": f"JSON解析失败: {str(e)}"}, 400
    except Exception as e:
        return {"status": "error", "msg": str(e)}, 500

注意:该方案仅针对当前数据结构做适配,如果后续TradingView返回的字段格式变化,需要调整正则规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:20:36