c 使用cJSON生成及解析json类型数据
一、概述
作用:可以在c程序中方便的进行json字符串的解析及生成
二、代码示例
//组装一个json串 void CJsonTest::valueToJsonObject() { cJSON* root, * fmt; char* out; root = cJSON_CreateObject();//创建一个obj(申请了堆内存记得释放) cJSON_AddItemToObject(root, "name", cJSON_CreateString("luoluoyang")); cJSON_AddNumberToObject(root, "age", 6); cJSON_AddItemToObject(root, "address", fmt = cJSON_CreateObject());//创建一个新的Object放入到root中 //给新的对象增加属性 cJSON_AddStringToObject(fmt, "addr", "he nan"); cJSON_AddNumberToObject(fmt, "width", 10); cJSON_AddNumberToObject(fmt, "height", 10); cJSON_AddFalseToObject(fmt, "interlace"); cJSON_AddTrueToObject(fmt, "isOpen"); cJSON_AddNumberToObject(fmt, "frame_rate", 24); //将cJSON转为json字符串输出 out = cJSON_Print(root); cout << out << endl; //释放申请的内存空间 cJSON_Delete(root); free(out); } //解析json串 void CJsonTest::parseJsonObject() { //组装json字符串(用于最后的测试) char* jsonStr; cJSON* root; root = cJSON_CreateObject();//初始化cJSON,这一步需要申请内存,记得清理 cJSON_AddStringToObject(root, "name", "LOL");//添加一个name属性,value是LOL cJSON* heros, * countrys; heros = cJSON_AddArrayToObject(root, "heros");//向root中添加一个heros数组 //向数组中添加元素 cJSON_AddItemToArray(heros, cJSON_CreateString("Tom")); cJSON_AddItemToArray(heros, cJSON_CreateString("Jack")); countrys = cJSON_AddArrayToObject(root, "countrys");//再创一个数组 cJSON* obj = cJSON_CreateObject();//创建一个object cJSON_AddStringToObject(obj, "name", "xiao ming"); cJSON_AddNumberToObject(obj, "age", 10); cJSON_AddItemToArray(countrys, obj);//将obj添加进数组 jsonStr = cJSON_Print(root); cout << jsonStr << endl; cJSON_Delete(root); //解析json字符串 cJSON* parseObj = cJSON_Parse(jsonStr); char* rootName = cJSON_GetObjectItem(parseObj, "name")->valuestring; cout << "rootName:" << rootName << endl; //从根节点中拿到数组 cJSON* arrStr = cJSON_GetObjectItem(parseObj, "heros"); //拿到json数组的长度 int arrLen = cJSON_GetArraySize(arrStr); //循环从数组中取出item for (int i = 0;i < arrLen;i++) { char* nameStr = cJSON_GetArrayItem(arrStr, i)->valuestring; cout << "nameStr:" << nameStr << endl; } //从object中取出对象数组 cJSON* myCountrys = cJSON_GetObjectItem(parseObj, "countrys"); cout << "myCountrys:" << cJSON_Print(myCountrys) << endl; cout << "------------解析jsonObject----------" << endl; //获取对象数组的长度 int countryLen = cJSON_GetArraySize(myCountrys); //循环遍历对象数组,并解析里面对象的value值 for (int i = 0;i < countryLen;i++) { cJSON* myObj = cJSON_GetArrayItem(myCountrys, i); char* itemName = cJSON_GetObjectItem(myObj, "name")->valuestring; cout << "itemName:" << itemName << endl; int myAge = cJSON_GetObjectItem(myObj, "age")->valueint; cout << "myAge:" << myAge << endl; } //释放开辟的内存 if (parseObj) { cJSON_Delete(parseObj); } free(jsonStr); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
2021-07-23 CentOS系统编译coturn时遇到的错误
2015-07-23 android ActionBarSherlock使用说明
2013-07-23 Android 一s个相对完整的自动升级功能实现代码
2013-07-23 Android 一个相对完整的自动升级功能实现代码