zoukankan      html  css  js  c++  java
  • 单片机模块化程序: 单片机加入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
    ",jsonValue->valuestring);//打印相应字段的值
            }
            jsonValue = cJSON_GetObjectItem(jsonData,"cmd");//查找cmd字段,如果存在则序列化cJSON结构体中
            
            if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
            {
                printf("%s
    ",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
    ",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
    ",jsonValue->valuestring);//打印相应字段的值
                }
                jsonValue = cJSON_GetObjectItem(jsonItem,"code");//查找code字段,如果存在则序列化cJSON结构体中
                if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
                {
                    printf("%s
    ",jsonValue->valuestring);//打印相应字段的值
                }
            }
        }
        cJSON_Delete(jsonData);//释放内存

    封装个数据:

    {"datemcu":"updata","value":2}

    封装个复杂点的数据:

    更多操作看官方例子:

     错误. 后来发现是malloc 内存不足导致的(cJSON 的数据全部用malloc 分配)

     

     

  • 相关阅读:
    C语言的swap函数的易错点
    C语言结构体指针,及其错误示范
    操作系统--问答题
    数据库-存储过程、触发器、视图-考研笔记
    数据库知识-恢复子系统、数据库恢复的基本技术、转储方法、日志文件、undo/redo操作、数据库镜像
    c语言,快排序找出第k小/大的数
    STM32的Flash读写保护,SWD引脚锁的各种解决办法汇总(2020-03-10)
    uCOS全家桶PDF文档整理汇总贴,提供论坛,百度云和腾讯云下载(2020-03-09)
    分享下之前做的STM32嵌入式Web完整设计教程和案例html,Ajax,Javacript,XML,cgi等
    【STM32H7教程】第71章 STM32H7的内部Flash应用之模拟EEPROM
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/11682091.html
Copyright © 2011-2022 走看看