cJONS序列化工具解读三(使用案例)

cJSON使用案例

由了解了cJSON的数据结构,接口以及实现之后,那么我们来举例说明其使用。

本例子是一个简单的学生信息表格管理,我们通过键值对的方式向json中增加元素信息。

然后可以格式化输出结果,也能够反向的由字符串输出生成原cJSON对象。

int Test_cJSON()
{

    cJSON* pRoot = cJSON_CreateObject();
    cJSON* pArray = cJSON_CreateArray();
    cJSON_AddItemToObject(pRoot, "students_info", pArray);
    char* szOut = cJSON_Print(pRoot);

    cJSON* pItem = cJSON_CreateObject();
    cJSON_AddStringToObject(pItem, "name", "chenzhongjing");
    cJSON_AddStringToObject(pItem, "sex", "male");
    cJSON_AddNumberToObject(pItem, "age", 28);
    cJSON_AddItemToArray(pArray, pItem);

    pItem = cJSON_CreateObject();
    cJSON_AddStringToObject(pItem, "name", "fengxuan");
    cJSON_AddStringToObject(pItem, "sex", "male");
    cJSON_AddNumberToObject(pItem, "age", 24);
    cJSON_AddItemToArray(pArray, pItem);

    pItem = cJSON_CreateObject();
    cJSON_AddStringToObject(pItem, "name", "tuhui");
    cJSON_AddStringToObject(pItem, "sex", "male");
    cJSON_AddNumberToObject(pItem, "age", 22);
    cJSON_AddItemToArray(pArray, pItem);

    char* szJSON = cJSON_Print(pRoot);
    cout << szJSON << endl;
    cJSON_Delete(pRoot);
    //free(szJSON);

    pRoot = cJSON_Parse(szJSON);

    pArray = cJSON_GetObjectItem(pRoot, "students_info");
    if (NULL == pArray)
    {
        return -1;
    }

    int iCount = cJSON_GetArraySize(pArray);
    for (int i = 0; i < iCount; ++i)
    {
        cJSON* pItem = cJSON_GetArrayItem(pArray, i);
        if (NULL == pItem)
        {
            continue;
        }

        string strName = cJSON_GetObjectItem(pItem, "name")->valuestring;
        string strSex = cJSON_GetObjectItem(pItem, "sex")->valuestring;
        int iAge = cJSON_GetObjectItem(pItem, "age")->valueint;
    }

    cJSON_Delete(pRoot);
    free(szJSON);
}

亦或是对于格式化的字符串,交给cJSON管理,自动识别,产生类型输出。

/* Parse text to JSON, then render back to text, and print! */
void doit(char *text)
{
    char *out; cJSON *json;

    json = cJSON_Parse(text);
    if (!json) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); }
    else
    {
        out = cJSON_Print(json);
        cJSON_Delete(json);
        printf("%s\n", out);
        free(out);
    }
}

/* Read a file, parse, render back, etc. */
void dofile(char *filename)
{
    FILE *f; long len; char *data;

    f = fopen(filename, "rb");
    assert(f);
    fseek(f, 0, SEEK_END);
    len = ftell(f);
    fseek(f, 0, SEEK_SET);

    data = (char*)malloc(len + 1);
    memset(data, 0, sizeof(char)*(len + 1));
    fread(data, 1, len, f);
    printf("%s", data);
    fclose(f);
    doit(data);
    free(data);
}
int main()
{
    char text1[] = "{\n\"name\": \"Jack (\\\"Bee\\\") Nimble\", \n\"format\": {\"type\":       \"rect\", \n\"width\":      1920, \n\"height\":     1080, \n\"interlace\":  false,\"frame rate\": 24\n}\n}";  doit(text1);  return 0;  
}

时间: 2024-10-26 12:07:44

cJONS序列化工具解读三(使用案例)的相关文章

cJSON序列化工具解读一(结构剖析)

cJSON简介 JSON基本信息 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.易于人阅读和编写.同时易于机器解析和生成.是一种很好地数据交换语言. 官方信息解读简介 JSON构建:基于两种结构 “名称/值”对 的集合. 值得有序列表. JSON具体结构表示 对象:一个”名称/值"对的集合  {名称:值,名称:值} 数组:值得有序集合[值,值] 值:str,num,true,false,null,object,array.可嵌套 字符串:由双引号包围

三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

版权声明:本文为sang原创文章,转载请注明出处. 目录(?)[+] 关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东.本篇博客我们不讲源码,只看使用.源码的解读会在下一篇博文中带来. inflate方法从大范围来看,分两种,三个参数的构造方法和两个参数的构造方法.在这两类中又有细分,OK,那我们就把各种情况都来演示一遍. 1.三个参数的in

PLSQL_性能优化效能跟踪工具DBMS_PROFILER分析(案例)

一.摘要 Oracle PLSQL性能诊断是经常会遇到问题,所以Oracle提供了比较多的程式诊断工具,其中包括了dbms_profiler包 DBMS_PROFILER中会用到一些基本构建如下 在调用程式前DBMS_PROFILER.START_PROFILER,启动对该程式监控 在调用程式后DBMS_PROFILER.STOP_PROFILER,结束对程式监控 在监控过程中,系统会将资料存放至三个表中PLSQL_PROFILER_RUNS -> UNITS -> DATA 通过profil

Google FlatBuffers——开源、跨平台的新一代序列化工具

前段时间刚试用了一个序列化工具cereal,请看cereal:C++实现的开源序列化库,打算再总结下我对google proto buf序列化库的使用呢, 结果还没动手,大Google又出了一个新的.开源.跨平台的序列化工具:FlatBuffers.那就索性先了解了解这个工具把. 一. 什么是Google FlatBuffers FlatBuffers是一个开源的.跨平台的.高效的.提供了C++/Java接口的序列化工具库.它是Google专门为游戏开发或其他性能敏感的应用程序需求而创建.尤其更

在.NET下学习Extjs(第三个案例 Array的过滤方法(filter))

Ext.Array.filter(Array array,Function fn,Object scope):Array array是一个数组,fn是过滤函数,scope是作用域,filter返回的是一个新的数组. 遍历原数组的每一项,经过滤函数过滤,为true的留下构建成新的数组. 构建代码如下: 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 &

linux程序分析工具介绍(三)——sar

本文要介绍的sar,是linux下用来分析系统本身运行情况的非常有用的工具.我们知道,程序在操作系统上要运行,要关注的点不外乎内存,CPU和IO(包括磁盘IO和网络IO).我们的应用程序在操作系统中运行前,我们需要了解系统当前的内存,cpu和IO的使用状况,还需要明白我们的应用程序运行时自身所需要的内存,cpu和IO资源的情况.只有操作系统剩余的内存,cpu和IO资源能够满足应用程序所需要的,才能保证应用程序在操作系统中正常的运行.sar就是用来帮助我们了解操作系统当前内存,cpu和IO等资源的

$.ajax、$.post、from表单序列化工具

$.ajax\$.post <script type="text/javascript" language="javascript" src="js/jquery-1.8.3.js" ></script> <script type="text/javascript"> //使用Ajax($.ajax)调用 function ajax(){ $.ajax({ type:"post&q

用序列化工具写入xml

标本: <?xml version="1.0" encoding="UTF-8" standalone="true"?> //文档的申明 <persons> //标签tag <person id=“18"> //ID是person标签的一个属性 <name>allen</name> <age>36</age> </person> <pe

SD3.0协议解读三

SD卡功能描述 所有主机和SD卡间的通信都是由主机控制的,这和USB是一致的,例如:U盘并没有主动通知USB控制器的能力,USB鼠标也没有主动通知USB控制器的能力,当然,SD卡也是没有主动通知SD控制器的能力的. 主机发送的命令有两种,一种是一对多,另一种自然是一对一了,他们分别是: 1.广播命令:广播命令发送给所有挂在SD总线上的SD卡,有一些广播命令需要SD卡作出响应. 2.寻址(点对点)命令:寻址命令只发送给具有相应地址的卡,并需要找到的那张卡返回一个响应. SD卡有两种模式,一种是卡识