• cJSON应用举例


    //在网上查了不少cJSON,结果只找到c语言字符串转换到JSON的实例,想转回来结果没有实例。自己琢磨了一个下午才敢下手。下面把转来转去的代码贴上。

    //百度网盘的 CJSON 实例源码 地址 http://pan.baidu.com/s/1ntsRLgt

    /*******************************************

    *先C转成JSON的字符串,然后再把这个JSON的字符串转回来。

    *******************************************/

    #include "stdio.h"

    #include "cjson.h"

    /*******************************

    * 建一个工程把"cjson.c"也加进去。

    * 要是不想建工程,那就把下面这个注释去掉。

    * 虽然正常人不这么干,但图个方便,也不管那么多了。

    *******************************/

    //#include "cjson.c"

    int main_()
    {

      //首先是用C转换成JSON
    char *out ;
    cJSON *root,*fmt;
    root=cJSON_CreateObject();//创建项目
    cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack ("Bee") Nimble"));
    cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject());//在项目上添加项目
    cJSON_AddStringToObject(fmt,"type", "rect");//在项目上的项目上添加字符串,这说明cJSON是可以嵌套的
    cJSON_AddNumberToObject(fmt,"width", 1920);
    cJSON_AddNumberToObject(fmt,"height", 1080);
    cJSON_AddNumberToObject(fmt,"frame rate", 24);

    out=cJSON_Print(fmt);
    printf("%s ",out);//此时out指向的字符串就是JSON格式的了
    free(out);//释放空间

      //接下来进行JSON格式向回转换

      cJSON *fmt = NULL,*JSONroot = NULL;

      num = cJSON_GetArraySize(JSONroot);//看看有多少个项目

      fmt = cJSON_GetObjectItem(JSONroot,"name");

      char name[256];

      snprintf(name,256,"%s",fmt->valuestring);//把fmt指向的JSON节点的字符串复制到name数组里来。

      //JSON是采用链式存储的,就是链表存储。具体的结构体可以在"cjson.h"里面找到

      /* The cJSON structure: */
    //typedef struct cJSON {
    // struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
    // struct cJSON *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */

    // int type; /* The type of the item, as above. */

    // char *valuestring; /* The item's string, if type==cJSON_String */
    // int valueint; /* The item's number, if type==cJSON_Number */
    // double valuedouble; /* The item's number, if type==cJSON_Number */

    // char *string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
    //} cJSON;

      cJSON *child;

      fmt = cJSON_GetObjectItem(JSONroot,"format");

      child = cJSON_GetObjectItem(fmt,"type");

      char type[256];

      snprintf(type,256,"%s",child->valuestring);

      child = cJSON_GetObjectItem(fmt,"width");

      int width = child->valueint;

      child = cJSON_GetObjectItem(fmt,"height");

      int heigh = child->valueint;

      child = cJSON_GetObjectItem(fmt,"frame rate");

      int frame = child->valueint;

    return 0;
    }

    补充一篇CJSON实例(创建和解析json对象、创建和解析json数组)《使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解

     不过使用cJSON的时候要注意,不要忘了cJSON_Delete()释放JSON的内存,和用free()释放cJSON_Print()或者cJSON_PrintUnformatted()返回的内存,否则会造成内存混乱。

    如果不想纠结内存管理方面的问题,可以考虑使用jsoncpp,这样就可以不去考虑内存的释放了

    jsoncpp http://www.cnblogs.com/fengbohello/p/4059435.html

    或 http://www.cnblogs.com/fengbohello/p/4066254.html

     

    作者:郝峰波

    mail : fengbohello@qq.com

  • 相关阅读:
    细数ASP.NET MVC框架的7大顶级功能
    Ubuntu 10.10更新源列表
    使用iTunes将任意mp3文件转为iPhone铃声
    简单5步,在新浪微博上关联多个博客
    在windows 7 建立一个弹出光驱的快捷方式
    中国人民太伟大了!
    Ubuntu 10.10
    du 熊填数字
    WPF学习02——XAML编译
    Debugging WPF data bindings
  • 原文地址:https://www.cnblogs.com/fengbohello/p/3226624.html
Copyright © 2020-2023  润新知