單片機模塊化程序: 單片機加入JSON是個不錯的選擇


 

 

這節需要知道的知識點

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 分配)

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM