Arduino构建JsonObject上传IFTTT时JSON特定位置意外token报错如何解决
报错诱因
你遇到的JSON解析错误根源是转义规则冲突:
- Google Sheets公式里的逗号分隔符需要用双引号包裹,而JSON规范明确要求字符串值内部的双引号必须前置反斜杠
\转义才能被正确识别 - 你当前在Arduino代码中写的
\"仅会在最终输出的字符串里生成普通双引号",没有附带JSON要求的转义反斜杠,导致解析器碰到这个双引号时会误认为value2的字符串值提前结束,后续字符变成非法内容,最终触发400错误。
解决方法
给公式内部的双引号加双重转义:Arduino字符串中要输出一个反斜杠本身需要先转义为\\,再搭配转义双引号的\",最终要生成JSON要求的\"格式,Arduino代码里需要写为\\"。
修改后的代码片段如下:
int test_value = 1; int t1 = test_value*1; int t2 = test_value*2; int t3 = test_value*3; int t4 = test_value*4; int t5 = test_value*5; int t6 = test_value*6; // 仅修改sgs的定义,给内部双引号加双重转义 String sgs = "=SPLIT(INDICE(1:2000; FILA();(COLUMNA()-1));\\\",\\\")"; String jsonObject = String("{\"value1\":\"") + t1 + "," + t2 + "," + t3 + "," + t4 + "," + t5 + "," + t6 + "\",\"value2\":\"" + sgs + "\"}"; Serial.println(jsonObject);
修改后可先通过串口输出验证JSON格式,合法的value2字段应该是类似"value2":"=SPLIT(INDICE(1:2000; FILA();(COLUMNA()-1));\",\")"的格式,双引号都带有反斜杠前缀。
优化建议
- 避免手动拼接JSON字符串,推荐使用Arduino官方的
ArduinoJson库,可自动处理所有转义逻辑,大幅降低格式错误概率 - 发送请求前可先把拼接好的JSON内容复制到JSON校验工具中检查,能快速定位格式问题
内容的提问来源于stack exchange,提问作者Eduardo Leon
相关产品推荐
相关产品推荐

