【AT】MQTT发布JSON出错的应对策略

开发者使用AT进行开发时,发布如下的json时,经常会出现ERROR:

1
2
→ AT+MPUB="data",0,0,“{“test”:1}”
← ERROR

那么为什么出现这个问题呢?实际上时因为payload的双引号有误导致的。一般,写代码时,遇到这种情况,我们都使用如下方式规避:

1
2
3
> a = "abc".."cef\"ghi\"jkl"
> print(a)
abccef"ghi"jkl

#但是,AT开发怎么办呢?
同样的,我们也应该转义——使用\22代替所有payload的双引号

1
→ AT+MPUB="data",0,0,“{\22test\22:1}”


有的开发者可能不太理解,为什么是\22呢?实际上很简单啦,十六进制hex转十进制是34,ascii表中,34对应的就是双引号啦。
1
2
3
4
> print(tonumber("22", 16))
34
> print(string.char(34))
"

#问题又来了,单片机端C代码中如何生成\22呢?
如果使用字符串,字符串内对\也需要转义处理,例如”\\22”才表示\22三个字节的字符串。

上次更新 2021-01-28