调用Google Cloud Function时JSON解码失败,求解决方案
解决Google Cloud Function POST请求JSON解码失败问题
针对你遇到的Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)错误,即使request.is_json返回True,可以尝试以下排查和解决步骤:
修正Postman请求体格式
你提供的payload是Python字典格式,但Postman发送请求时需要使用标准JSON格式:- 在Postman的
Body标签选择raw,然后将右侧格式切换为JSON - 输入正确的JSON内容(注意使用双引号):
{ "symbol": "AAPL", "quantity": "5", "side": "buy" }
不要直接粘贴Python代码到请求体中,JSON不支持单引号和Python语法。
- 在Postman的
调整
get_json()的参数
在云函数中,给get_json()添加参数强制解析或静默处理错误:def trade_stock(request): # 静默模式:解码失败时返回None,避免直接抛出错误 my_data = request.get_json(silent=True) if not my_data: return {'Code': 'Error', 'Message': 'Invalid JSON payload'} # 或者强制解析,忽略Content-Type头的影响 # my_data = request.get_json(force=True) api.submit_order( my_data['symbol'], my_data['quantity'], my_data['side'], 'market', 'gtc' ) return {'Code': 'Successful'}打印原始请求体排查
添加日志打印原始请求内容,确认云函数实际收到的数据:def trade_stock(request): # 打印原始请求体到debug日志 raw_body = request.get_data().decode('utf-8') print(f"Received raw body: {raw_body}") my_data = request.get_json() # 后续代码...启动云函数时的
--debug模式会输出这条日志,你可以检查实际收到的内容是否为合法JSON,是否存在隐藏字符、空内容或格式错误。确认请求头的正确性
再次检查Postman的Headers中Content-Type是否严格设置为application/json,不要添加多余的字符或空格,比如避免写成application/json; charset=utf-8以外的格式(虽然大部分情况兼容,但严格匹配可以排除潜在问题)。
内容的提问来源于stack exchange,提问作者thecodeman
相关产品推荐
相关产品推荐

