14-单片机模块化程序: 单片机加入JSON是个不错的选择

资料源码:https://gitee.com/yang456/OpenProgrammingModuleForMCU.git

点击加入群聊【单片机,物联网,上位机】:ESP8266开发交流群

说明1:知识从未如此性感。 烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系!

说明2:学的是思想,而非程序!此代码思路适用于所有的单片机。

说明3:学会以后,下面的代码可能会跟你一辈子!

说明4:这一系列文章是为大幅度裁剪本人博客文章!使博客文章更有条理。便于推其它教程!

 

这节需要知道的知识点

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

 

 

 

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值