TradingView变量替换后JSON请求转为text/plain的解决方法问询
解决TradingView警报JSON格式被识别为text/plain的问题
问题根源
在TradingView警报的JSON模板中使用{{close}}这类变量时,大概率是变量插入后导致JSON语法不合法,触发TradingView自动将请求头设为text/plain而非application/json。
解决方案
1. 确保JSON模板渲染后语法完全合法
- 数值类型变量(如
{{close}}、{{open}})不要加引号,直接嵌入JSON:
这里{"ticker": {{close}}, "symbol": "{{ticker}}", "timestamp": "{{time}}"}{{ticker}}是字符串类型,需要包裹双引号;而{{close}}是数值,直接使用即可。 - 避免在模板中加入JSON不支持的内容(如注释、多余的逗号),TradingView渲染后必须是标准JSON格式。
2. 手动验证模板有效性
把模板中的变量替换为实际值,用Python的json模块验证是否合法:
import json # 模拟TradingView渲染后的JSON内容 test_json = '{"ticker": 156.78, "symbol": "AAPL"}' try: json.loads(test_json) print("JSON格式合法") except json.JSONDecodeError as e: print(f"JSON错误: {e}")
3. Flask服务器端兼容处理
如果TradingView仍无法正确识别为JSON,在服务器端做降级解析:
from flask import Flask, request import json app = Flask(__name__) @app.route('/tradingview-webhook', methods=['POST']) def handle_webhook(): # 先尝试解析application/json格式 data = request.get_json() if not data: # 降级解析text/plain格式的内容 try: raw_data = request.data.decode('utf-8') data = json.loads(raw_data) except json.JSONDecodeError: return "无效的JSON格式", 400 # 后续业务逻辑处理 print(f"收到数据: {data}") return "处理成功", 200
4. 检查TradingView警报设置
- 确保警报的“消息”字段没有多余的空格、换行或特殊字符;
- 确认警报触发时,变量
{{close}}能正常获取到数值(无空值或异常值)。
内容的提问来源于stack exchange,提问作者Casey Harrils
相关产品推荐
相关产品推荐

