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

使用Google Script调用Home Assistant API时出现JSON解析错误求助

问题分析与解决

报错SyntaxError: Unexpected non-whitespace character after JSON at position 3说明执行JSON.parse(data)时,返回的data并非有效JSON格式。虽然Postman请求正常,但Google Script的请求环境和Postman存在差异,常见原因及解决方法如下:

可能原因

  1. 证书验证问题:Home Assistant若使用自签名证书,Google Script的UrlFetchApp会默认拦截,返回证书错误的HTML页面而非JSON,导致解析失败。
  2. 请求头缺失:Postman会自动添加Accept: application/json头,你的代码未明确指定该字段,部分场景下Home Assistant可能返回非JSON内容。

解决方案

1. 先排查返回内容

查看Logger.log(response.getContentText())的输出:如果是HTML页面,确认为证书问题;如果是错误文本或非标准JSON,针对性处理。

2. 修改请求参数

更新options对象,添加必要请求头并处理证书验证(若为自签证书):

function fetchHomeAssistantData() {
  var url = "https://myurl:8123/api/states/sensor.produzione_max_oggi";
  var token = "myapikey";

  var options = {
    "method": "GET",
    "headers": {
      "Authorization": "Bearer " + token,
      "Accept": "application/json" // 明确要求返回JSON格式
    },
    "muteHttpExceptions": true,
    "validateHttpsCertificates": false // 跳过自签证书验证,注意安全风险
  };

  var response = UrlFetchApp.fetch(url, options);
  // 打印状态码和返回内容,方便排查
  Logger.log("状态码: " + response.getResponseCode());
  Logger.log("返回内容: " + response.getContentText());

  var data = response.getContentText();
  // 仅在请求成功时解析JSON
  if (response.getResponseCode() === 200) {
    try {
      var jsonData = JSON.parse(data);
      var state = jsonData.state;
      var lastChanged = jsonData.last_changed;
      Logger.log("传感器状态: " + state + ", 更新时间: " + lastChanged);
    } catch (e) {
      Logger.log("JSON解析错误: " + e.message);
    }
  } else {
    Logger.log("请求失败,状态码: " + response.getResponseCode());
  }
}

3. 安全提示

关闭证书验证存在安全风险,建议给Home Assistant配置受信任的SSL证书(如Let's Encrypt),避免使用validateHttpsCertificates: false。

内容的提问来源于stack exchange,提问作者emanuele mattiolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:42:22