其他
骚操作!快速创建JSON数据和解析JSON数据
在对接乐鑫云物联网平台的时候,可以使用tcp socket发送和接收json数据进行交互,之前专门写了一篇文章,介绍cJSON的使用,而,看了乐鑫给的官方代码后,正应了这句话,突如其来的骚,闪了老子的腰!
1.快速生成JSON数据
核心思想:构造字符串!
这里我拿设备激活举个例子,设备激活的数据格式如下:
{"path": "/v1/device/activate/", "method": "POST", "meta": {"Authorization": "token HERE_IS_THE_MASTER_DEVICE_KEY"}, "body": {"encrypt_method": "PLAIN", "bssid": ":bssid", "token": ":token"}}
其中:
HERE_IS_THE_MASTER_DEVICE_KEY
:填写之前获取的秘钥;bssid
:填写设备MAC地址;token
:随机值即可,可以留空;
这样的一条数据,如果使用cJSON的函数一条一条创建,既代码量大,而且内存占用量也很大,接下来向大家介绍一个骚扰操作,看完后,我相信你会点赞的!
首先直接使用宏定义将整段JSON字符串转化为:
然后一行命令即可构造出将其中两个需要用户指定的值定义:
最后一行代码解决问题,简洁到爆炸:
sprintf(active_data, ACTIVE_DATA, TOKEN, BSSID);
整段程序如下:
int main(void)
{
char* active_data = malloc(300);
sprintf(active_data, ACTIVE_DATA, TOKEN, BSSID);
printf(active_data);
return 0;
}
编译运行:
2.快速解析
"deliver_to_device": true, "get": "action": "LED_ON", "meta": "Authorization": "token 8668c64f40d172be31eb4f12cbcaf4e57c9e1e3c", "Time-Zone": "Asia/Shanghai", "method": "GET", "nonce": 587250592, "path": "/v1/device/rpc/"
其中想要的数据只有:
所以,为什么要浪费精力,浪费代码,浪费内存去用cJSON条一条解析数据,而且解析出来有用的值只有“ LED_ON”,所以直接使用C库函数strstr()
判断与此字符串中有没有“ LED_ON”就可以啦〜
char rpc_cmd[] = "\
\"deliver_to_device\": true,\
\"get\": \"action\": \"LED_ON\",\
\"meta\": \"Authorization\": \"token 8668c64f40d172be31eb4f12cbcaf4e57c9e1e3c\",\
\"Time-Zone\": \"Asia/Shanghai\",\
\"method\": \"GET\",\
\"nonce\": 587250592,\
\"path\": \"/v1/device/rpc/\"\
";
int main(void)
{
if(strstr(rpc_cmd, "LED_ON"))
{
printf("LED need to turn on!\n");
}
return 0;
}
编译运行:
这样生成和解析的骚动,你学会了吗?哈哈哈〜虽然流氓一点,但是真的很好用,学会的话点个赞吧!
更多精彩文章及资源,欢迎关注我的微信公众号:『mculover666』。
Modified on