這節需要知道的知識點
https://www.cnblogs.com/yangfengwu/p/11685325.html
下載JSON文件:
鏈接: https://sourceforge.net/projects/cjson/
等到倒計時到0
拷貝JSON源文件和頭文件,添加頭文件到include.h
解析個數據
"{\"datemcu\":\"updata\",\"cmd\":\"model\"}"
JSON標准格式 {"字段","字段值"}
\" 意思是轉義 " 就是說這個" 並不起什么作用,只是個"
如果不寫 \ 那么會認為 "{" 就會和前面的" 配合了
char jsonValue1[50]="{\"datemcu\":\"updata\",\"cmd\":\"model\"}"; cJSON *jsonData,*jsonValue; int main(void) { NVIC_Configuration(); uart_init(115200); //串口初始化為115200 GpioInit(); DelayInit(); rbCreate(&Uart1rb,Usart1SendBuff,Usart1SendLen);//創建環形隊列--串口1 jsonData = cJSON_Parse(jsonValue1);//把數據存儲到cJSON鏈表中 if(jsonData)//是JSON數據 { jsonValue = cJSON_GetObjectItem(jsonData,"datemcu");//查找datemcu字段,如果存在則序列化cJSON結構體中 if(jsonValue->type == cJSON_String)//獲取當前字段的數據類型 { printf("%s\r\n",jsonValue->valuestring);//打印相應字段的值 } jsonValue = cJSON_GetObjectItem(jsonData,"cmd");//查找cmd字段,如果存在則序列化cJSON結構體中 if(jsonValue->type == cJSON_String)//獲取當前字段的數據類型 { printf("%s\r\n",jsonValue->valuestring);//打印相應字段的值 } } cJSON_Delete(jsonData);//釋放內存
解析個二維的數據:
"{\"datemcu\":\"updata\",\"cmd\":{\"Id\":\"CH010100\",\"code\":\"001\"}}";
char jsonValue2[100]="{\"datemcu\":\"updata\",\"cmd\":{\"Id\":\"CH010100\",\"code\":\"001\"}}"; cJSON *jsonData,*jsonItem,*jsonValue; int main(void) { NVIC_Configuration(); uart_init(115200); //串口初始化為115200 GpioInit(); DelayInit(); rbCreate(&Uart1rb,Usart1SendBuff,Usart1SendLen);//創建環形隊列--串口1 jsonData = cJSON_Parse(jsonValue2);//把數據存儲到cJSON鏈表中 if(jsonData)//是JSON數據 { jsonValue = cJSON_GetObjectItem(jsonData,"datemcu");//查找datemcu字段,如果存在則序列化cJSON結構體中 if(jsonValue->type == cJSON_String)//獲取當前字段的數據類型 { printf("%s\r\n",jsonValue->valuestring);//打印相應字段的值 } jsonItem = cJSON_GetObjectItem(jsonData,"cmd");//查找cmd字段,如果存在則序列化cJSON結構體中 if(jsonItem->type == cJSON_Object)//獲取當前字段的數據類型,(一個JSON對象) { jsonValue = cJSON_GetObjectItem(jsonItem,"Id");//查找Id字段,如果存在則序列化cJSON結構體中 if(jsonValue->type == cJSON_String)//獲取當前字段的數據類型 { printf("%s\r\n",jsonValue->valuestring);//打印相應字段的值 } jsonValue = cJSON_GetObjectItem(jsonItem,"code");//查找code字段,如果存在則序列化cJSON結構體中 if(jsonValue->type == cJSON_String)//獲取當前字段的數據類型 { printf("%s\r\n",jsonValue->valuestring);//打印相應字段的值 } } } cJSON_Delete(jsonData);//釋放內存
封裝個數據:
{"datemcu":"updata","value":2}
封裝個復雜點的數據:
更多操作看官方例子:
錯誤. 后來發現是malloc 內存不足導致的(cJSON 的數據全部用malloc 分配)