因为要做一个stm32的示波器,进而发现了一篇博客,里面的数据传输使用了json的格式,便去学习了json格式的解读,因此下位机的发送数据的方式要进行一部分的改变
因为思想过于简单明了,便不再赘述
发送部分
static uint8_t number_data=0;
void json_pack(void)
{
cJSON * usr;
char *data;
number_data=number_data+1; //模拟数字
if(number_data>100)
{
number_data=0;
}
usr=cJSON_CreateObject(); //创建根数据对象
cJSON_AddItemToObject(usr, "A", cJSON_CreateNumber(number_data)); //根节点下添加数字
cJSON_AddItemToObject(usr, "B", cJSON_CreateString("hello")); //根节点下添加字符
cJSON_AddItemToObject(usr, "C", cJSON_CreateString("帅")); //根节点下添加汉字
data = cJSON_Print(usr); //将json形式打印成正常字符串形式(带有\r\n)
// data = cJSON_PrintUnformatted(usr); //将json形式打印成正常字符串形式(没有\r\n)
printf("%s",data); //通过串口打印出来
/********************/
/* 释放内存 */
/*********************/
cJSON_Delete(usr);
free(data);
}
接收解析部分
void json_analysis()
{
cJSON *json,*json_one,*json_two,*json_three;
char* out="{\"one\":\"long\",\"two\":\"2\",\"three\":3}";
json = cJSON_Parse(out); //将得到的字符串解析成json形式
/****************************/
/* 测试将JSON打印出来 */
/***************************/
//char *out_data = cJSON_Print(json); //将json形式打印成正常字符串形式
//printf("%s",out_data);
json_one = cJSON_GetObjectItem( json , "one" ); //从json获取键值内容
json_two = cJSON_GetObjectItem( json , "two" );//从json获取键值内容
json_three = cJSON_GetObjectItem( json , "three" );//从json获取键值内容
printf("\r\none:%s two:%d three:%d",json_one->valuestring,json_two->valueint,json_three->valueint);
cJSON_Delete(json); //释放内存
}