STM32之使用cJson库来处理json格式数据的学习笔记

       随着物联网的发展,越来越多的嵌入式设备需要联网进行数据交互,而其中一个比较流行的数据交换格式是json,已经越来越多的在嵌入式应用中得到使用,本文基于STM32F767完成json数据的处理。

最新版的cJson源码可以从github上进行下载:https://github.com/DaveGamble/cJSON

对cJson库在STM32F767上的移植过程整理如下:

1、将下载的cJson库文件添加到工程的对应文件夹,并将其添加到项目中

STM32之使用cJson库来处理json格式数据的学习笔记_第1张图片

STM32之使用cJson库来处理json格式数据的学习笔记_第2张图片

void printJson(cJSON * root)//以递归的方式打印json的最内层键值对
{
	int i;
    for(i=0; itype)      //如果对应键的值仍为cJSON_Object就递归调用printJson
            printJson(item);
        else                                //值不为json对象就直接打印出键和值
        {
            printf("%s->", item->string);
            printf("%s\n", cJSON_Print(item));
        }
    }
}

char * jsonStr = "{\"semantic\":{\"slots\":{\"name\":\"张三\"}}, \"rc\":0, \"operation\":\"CALL\", \"service\":\"telephone\", \"text\":\"打电话给张三\"}";
    cJSON * root = NULL;
    cJSON * item = NULL;//cjson对象 

root = cJSON_Parse(jsonStr);     
if (!root) 
{
    printf("Error before: [%s]\n",cJSON_GetErrorPtr());
}
else
{
    printf("%s\r\n", "有格式的方式打印Json:");           
    printf("%s\r\n\r\n", cJSON_Print(root));
    printf("%s\r\n", "无格式方式打印json:");
    printf("%s\r\n\r\n", cJSON_PrintUnformatted(root));

    printf("%s\r\n", "一步一步的获取name 键值对:");
    printf("%s\r\n", "获取semantic下的cjson对象:");
    item = cJSON_GetObjectItem(root, "semantic");//
    printf("%s\r\n", cJSON_Print(item));
    printf("%s\r\n", "获取slots下的cjson对象");
    item = cJSON_GetObjectItem(item, "slots");
    printf("%s\r\n", cJSON_Print(item));
    printf("%s\r\n", "获取name下的cjson对象");
    item = cJSON_GetObjectItem(item, "name");
    printf("%s\r\n", cJSON_Print(item));

    printf("%s:", item->string);   //看一下cjson对象的结构体中这两个成员的意思
    printf("%s\r\n", item->valuestring);
                        

    printf("\r\n%s\r\n", "打印json所有最内层键值对:");
    printJson(root);
}

 

你可能感兴趣的:(#,STM32)