单片机加入JSON是个不错的选择

Posted 优秀不够,你是否无可替代

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机加入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 分配)

 

 

 

 

 

 

以上是关于单片机加入JSON是个不错的选择的主要内容,如果未能解决你的问题,请参考以下文章

vscode 用户代码片段 vue初始化模板 Snippet #新加入开头注释 自动生成文件名 开发日期时间等内容

VSCode 配置快速输入函数注释

VSCode 配置快速输入函数注释

干货 | 小程序 gulp 简单构建

keil怎样把C语言转换成单片机汇编语言

vs code 自定义代码片段