在CJSON的开发中,对于新手来说遇到的问题一般是或许如下几个:

第一、如何将C结构体转为一个Json数据格式的结构体?

第二、如果遇到Json数据格式中含有结构体数组怎么解析?

第三、如果遇到多层结构体嵌套又怎么解析?

如下图示,为多层结构体嵌套以及内含一个结构体数组:

以上问题也是我在进行JSON开发时所遇到的问题,经过学习及实验,最后才将CJSON的应用熟练,以下是代码的整理,对于多层结构体嵌套,嵌套的结构体数组如何添加和解析等的使用方法,在此记录只为供交流学习、复习及日后参考。

注意:在创建对象的时候要释放创建出来的对象空间,如果内嵌多个对象,只需要delete最顶层的root就行了。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <math.h>
#include "cJSON.h"struct stGetOnePic{int LibIndex;int FlieIndex;char Pic[16];
};struct stTestArray{int justTest0;char justTest1[16];
};struct stInfo{char Name[8];char UUID[16];int TimeStamp;char Sign[16];int Mode;char Action[16];struct stGetOnePic GetOnePic;struct stTestArray TestArray[5];
};int main()
{int i =0;//鐢熸垚Json鏁版嵁鏍煎紡cJSON*response_root = cJSON_CreateObject();cJSON_AddStringToObject(response_root, "Name", "123");cJSON_AddStringToObject(response_root, "UUID", "1234");cJSON_AddNumberToObject(response_root, "TimeStamp", 252);cJSON_AddStringToObject(response_root, "Sign", "12365");cJSON_AddNumberToObject(response_root, "Mode", 3);cJSON_AddStringToObject(response_root, "Action", "12396");cJSON*getonepic_root = cJSON_CreateObject();cJSON_AddNumberToObject(getonepic_root, "LibIndex", 9);  cJSON_AddNumberToObject(getonepic_root, "FlieIndex", 5);cJSON_AddStringToObject(getonepic_root, "Pic", "1236");cJSON_AddItemToObject(response_root, "GetOnePic", getonepic_root);cJSON*array=cJSON_CreateArray();cJSON_AddItemToObject(response_root,"TestArray",array);for(i=0;i<5;i++){cJSON*obj=cJSON_CreateObject();cJSON_AddItemToArray(array,obj);if(i%2 == 0) cJSON_AddNumberToObject(obj, "justTest0", i);else cJSON_AddStringToObject(obj, "justTest1", "12365");}char *response_str = cJSON_Print(response_root);printf("%s\n",response_str);cJSON *pRcvJson = cJSON_Parse(response_str);if(NULL == pRcvJson){printf("%s cJSON_Parse failed, line =%ld\n",__FUNCTION__, __LINE__);return -1;}cJSON *item=cJSON_GetObjectItem(pRcvJson,"Name");if(item!=NULL) printf("Name:%s\n",item->valuestring);item=cJSON_GetObjectItem(pRcvJson,"UUID");if(item!=NULL) printf("UUID:%s\n",item->valuestring);item=cJSON_GetObjectItem(pRcvJson,"TimeStamp");if(item!=NULL) printf("TimeStamp:%u\n",item->valueint);item=cJSON_GetObjectItem(pRcvJson,"Sign");if(item!=NULL) printf("Sign:%s\n",item->valuestring);item=cJSON_GetObjectItem(pRcvJson,"Mode");if(item!=NULL) printf("Mode:%d\n",item->valueint);item=cJSON_GetObjectItem(pRcvJson,"Action");if(item!=NULL) printf("Action:%s\n",item->valuestring);cJSON* psecond = cJSON_GetObjectItem(pRcvJson,"GetOnePic");if(psecond!=NULL){item=cJSON_GetObjectItem(psecond,"LibIndex");if(item!=NULL) printf("LibIndex:%d\n",item->valueint);item=cJSON_GetObjectItem(psecond,"FlieIndex");if(item!=NULL) printf("FlieIndex:%d\n",item->valueint);item=cJSON_GetObjectItem(psecond,"Pic");if(item!=NULL) printf("Pic:%s\n",item->valuestring);}cJSON *arrayread=cJSON_GetObjectItem(pRcvJson,"TestArray");if(arrayread !=NULL){int arraysize=cJSON_GetArraySize(arrayread);printf("TestArray:\n");for(i=0;i<arraysize;i++){item=cJSON_GetArrayItem(arrayread,i);if(item != NULL){cJSON *itemread=cJSON_GetObjectItem(item,"justTest0");if(itemread != NULL) printf("justTest0:%d\n",itemread->valueint);itemread=cJSON_GetObjectItem(item,"justTest1");if(itemread != NULL) printf("justTest1:%s\n",itemread->valuestring);}}}if(response_root!=NULL) cJSON_Delete(response_root); //在这里释放最顶层的就好if(pRcvJson !=NULL) cJSON_Delete(pRcvJson);free(response_str);return 0;
}

CJSON 创建含多层嵌套结构体及结构体解析相关推荐

  1. php简单网站源码包含数组_PHP无限分级阶梯递归数组排列 以及多层嵌套数组在网页中的解析源码...

    数组递归 PHP无限分级 将数组递归转化成阶梯型数组 数组中包含数组 使用更方便 查看也很方便,网上找的都不是很好,自己写的才是王道 简单的递归 没有什么特别之处  只是自己写的容易理解一点而已! 代 ...

  2. C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用)

    C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用) 目录 C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数, ...

  3. c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const

    十二.结构体 (1)结构体定义和使用 基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型. 参考视频:https://www.bilibili.com/video/BV1et411b ...

  4. C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例

    C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例 目录 一.简单介绍 二.结构体定义和使用 三. ...

  5. 【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体 const

    文章目录 1. 定义和使用 2. 结构体数组 3. 结构体指针 4. 结构体嵌套结构体 5. 结构体做函数参数 6. 结构体 const 1. 定义和使用 结构体属于用户自定义的数据类型,允许用户存储 ...

  6. C++结构体 结构体定义和使用、结构体数组、结构体指针、结构体嵌套结构体、结构体做函数参数

    C++结构体 第二章 C++结构体 1.结构体定义和使用 语法:struct 结构体名 { 结构体成员列表 }: 通过结构体创建变量的方式有三种: struct 结构体名 变量名 struct 结构体 ...

  7. c++基础知识第十天:结构体嵌套结构体,结构体作函数参数

    一.结构体嵌套结构体 结构体内的成员可以是另一个结构体(访问时用.访问到不能访问为止) 1.例如:每个老师指导一个学员,一个老师的结构体中嵌套一个学生的结构体 #include<iostream ...

  8. Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)

    1. 自定义类型格式 用户自定义类型使用关键字 type ,其语法格式是: type newType oldType oldType 可以是自定义类型.预声明类型.未命名类型中的任意一种. newTy ...

  9. EasyStruct.js轻松创建可填入式html模板结构

    友情提醒:由于旧版本的EasyStruct有一些bug,现在已经全部修复,而且增加了一份详细的demo,如果想要使用的话可以直接下载demo去看了,下面这篇介绍可以跳过了. 友情链接:http://d ...

最新文章

  1. Win7备份的取消与磁盘空间恢复
  2. MYSQL的随机抽取实现方法
  3. 用‘栈’的思想编写一个十进制转换二进制、八进制或十六进制的程序
  4. 品味ZooKeeper之Watcher机制_2
  5. Java中synchronized与Lock的区别
  6. 详解Oracle临时表的几种用法及意义
  7. AutoCAD2020命令提示框信息设置
  8. Codeforces Round #776 (Div. 3)
  9. SolidKit.ERPs ERP集成接口工具(for SOLIDWORKS PDM)
  10. intel无线网卡linux驱动安装,Ubuntu应用---安装 Intel Wireless-AC 9462 无线网卡驱动(无法连接wifi,完美解决)...
  11. 前有狗屁不通文章生成器 | 后有申论生成器
  12. Django介绍,mvc设计模式及mvt设计模式介绍及对比
  13. 【web素材】13—43套大气的企业网站模板
  14. 如果有人再问你 Java IO,把这篇文章砸他头上
  15. Eclipse软件使用教程
  16. 同源策略的限制,没有同源策略会怎么样?
  17. Poj·Dessert
  18. 如何启用计算机睡眠功能,如何让电脑休眠_如何开启电脑休眠模式-win7之家
  19. vue 改变table某一行的值_elementui 点击table的一行数据,怎么更改这一行的样式?...
  20. 蒟蒻的爬虫之旅(Python版)——robots君子协议(转载)

热门文章

  1. 华为服务器网卡驱动安装文件,服务器网卡驱动
  2. 搭建SNS游戏服务器
  3. Laravel4.1数据库 数据库填充(六)
  4. MetaIn中poi点在智慧城市的运用
  5. 手机h5实现长按复制(支持安卓和ios)
  6. 判断文件结束的几种方法和eof()函数
  7. java testng 项目_JAVA+SELENIUM+MAVEN+TESTNG框架(二)新建项目
  8. 大电流场效应管500a_常用大功率场效应管参数
  9. PNP三极管工作原理,在起开关作用时的工作原理及工作电压电流分别是什么?
  10. 华为数通笔记-网络管理协议