|
|
我这边想做一个接收json格式数据然后进行拆包的工作,然后发现一个问题,程序如下
char weather_data[] = {"+IPD,267:{\"results\":[{\"location\":{\"id\":\"WTQ3VZQP879N\",\"name\":\"瀹佹尝\",\"country\":\"CN\",\"path\":\"瀹佹尝,瀹佹尝,娴欐睙,涓浗\",\"timezone\":\"Asia/Shanghai\",\"timezone_offset\":\"+08:00\"},\"now\":{\"text\":\"闃甸洦\",\"code\":\"10\",\"temperature\":\"29\"},\"last_update\":\"2023-09-06T14:44:32+08:00\"}]}\r\nCLOSED"};
void weather_data_process(char* response) {
char* line;
char* token;
char tem[100];
u16 i;
line = strstr(response, "8"); // 按换行符分割字符串
while (line != NULL)
{
// token = strtok(response, ",");
// token = strtok(response, ":");
u2_sendstring(parameter39);
/* token = strtok(response, "}");
token = strtok(NULL, "{");
token = strtok(NULL, ",");
token = strtok(NULL, ":");
token = strtok(NULL, "\"");
*/
//这段是拆解天气的程序
// sys_write_vp(0x4700, (u8*)&i, 1);
// strncpy(parameter[0], token, MAX_SIZE - 1);
// i=*token;
token = strtok(NULL, ":");
token = strtok(NULL, "\"");
// strncpy(tem, token, 99);
// sys_write_vp(0x4700, (u8*)tem, strlen(tem));
// 清零数组
// memset(wifiName, 0, sizeof(wifiName));
// }
// line = strtok(response+len, "\n"); // 继续分割下一行
}
}
void main(void)
{
u16 len;
sys_init();//系统初始化
uart2_init(115200);//初始化串口2
//Uart4_Init(115200);//初始化串口4
while(1)
{
weather_data_process(weather_data);
}
// }
}
问题出现在这里 line = strstr(response, "8"); // 按换行符分割字符串
while (line != NULL)
这个地方用strstr判断response中是否有8这里,我试了很多次,发现根本进不去while循环。试过字符串里面本来有的很多字母,”code“,”results“ 包括很多数字,全都不行,进不去循环。判断成功的只有"," ,"+" , "_"这些符号,如果把这里改成强行进行while(1)拆出来的全部都是乱码,请问一下有经验的工程师这是什么原因,因为我在别的c语言的ide里面进行过模拟,跑出来是好的,放在迪文屏上就不行了,非常奇怪。 |
|