关于c语言操作json,cjson还挺好用,许多操作已经帮开发员封装好了,使用起来很方便。资源下载地址为:http://sourceforge.net/projects/cjson/
在test.c文件中已经有很多例子,看了还不会使用可以直接看cjson.c文件,也不深奥,实际上就是个双链表,然后是对这个双链表进行增删改查
记录下这两天运用到的

现有一个json文件如下:
[
{
"id": "c1",
"option": "install",
"fid": "1"},
{
"id": "p1",
"option": "notinstall",
"fid": "2"
}
]

1. 读取一个json文件,返回json结构链表,注意,这里返回值必须为cJSON*,具体原因看上一篇文章。另外关于json的介绍看,http://www.json.org/json-zh.html

cJSON* GetJsonObject(char* fileName, cJSON* json)
{
    long len;
    char* pContent;
    int tmp;
    FILE* fp = Open_File(fileName, "rb+");
    if(!fp)
    {
        return NULL;
    }
    fseek(fp,0,SEEK_END);
    len=ftell(fp);
    if(0 == len)
    {
        return NULL;
    }
   
    fseek(fp,0,SEEK_SET);
    pContent = (char*) malloc (sizeof(char)*len);
    tmp = fread(pContent,1,len,fp);

Close_File(fp);
    json=cJSON_Parse(pContent);
    if (!json)
    {
        return NULL;
    }
    free(pContent);
    return json;
}

2 读取cJSON索引为index的结点某个key值对应的value,索引从0开始

BOOL GetValueString(cJSON* json,int id, char* name, char* param)
{
    cJSON* node;
    node = cJSON_GetArrayItem(json,id);
    if(!node)
    {
        return FALSE;
    }
    sprintf(param, "%s", cJSON_GetObjectItem(node, name)->valuestring);
    return TRUE;
}
比如读取id=1,name="name",得到param为"notinstall"

3 生成json文件
void Create_Pkgs(char* option1, char* option2)
{
    cJSON *root,*fld;
    char *out;
    FILE* fp = Open_File(Pkgs_File, "w+");
    root=cJSON_CreateArray();

cJSON_AddItemToArray(root,fld=cJSON_CreateObject());
    cJSON_AddStringToObject(fld, "id", "c1");
    cJSON_AddStringToObject(fld, "option", option1);
    cJSON_AddStringToObject(fld, "fid", "1");

cJSON_AddItemToArray(root,fld=cJSON_CreateObject());
    cJSON_AddStringToObject(fld, "id", "p1");
    cJSON_AddStringToObject(fld, "option", option2);
    cJSON_AddStringToObject(fld, "fid", "2");  
   
    out=cJSON_Print(root);
    fprintf(fp, out);   
    Close_File(fp);

cJSON_Delete(root);
    free(out);

out = NULL;
    root = NULL;
}

cJson 创建 读取的更多相关文章

  1. js cookie创建读取删除函数封装

    js cookie创建读取删除函数封装 一.总结 都是为了方便操作,这样弄了很方便 1.创建cookie的函数封装的作用:方便设置过期时间expire,方便设置键和值 2.查询cookie的数据封装的 ...

  2. 一个可创建读取日志的管理类(可固定创建2M大小的日志文件)

    这里,将日志管理基类命名为LogManagerBase(抽象类),具体的不同类型的日志可以通过继承完成.该基类可将日志以每个2M的方式存储起来,并可以读取当前正在使用的日志的所有内容. 要实现该基类, ...

  3. php创建读取 word.doc文档

    创建文档; <?php $html = "this is question"; for($i=1;$i<=3;$i++){ $word = new word(); $w ...

  4. 在.NET中使用iTextSharp创建/读取PDF报告: Part I [翻译]

    原文地址:Create/Read Advance PDF Report using iTextSharp in C# .NET: Part I    By Debopam Pal, 27 Nov 20 ...

  5. c#使用DotNetZip封装类操作zip文件(创建/读取/更新)实例

    DotnetZip是一个开源类库,支持.NET的任何语言,可很方便的创建,读取,和更新zip文件.而且还可以使用在.NETCompact Framework中.  下载地址在这里:http://dot ...

  6. C# 创建 读取 更新 XML文件

    public static class XmlHelper { /// <summary> /// 读取节点值 /// </summary> /// <param nam ...

  7. 创建/读取/删除Session对象

    //创建Session对象 Session["userName"] = "顾德博";//保存,这里可以存储任意类型的数据,包括对象.集合等 Session.Ti ...

  8. 10.ODBC创建/读取Excel QT4

    看到一篇MFC的参考链接:https://blog.csdn.net/u012319493/article/details/50561046 改用QT的函数即可 创建Excel //创建Excel v ...

  9. JavaScript创建读取cookie代码示例【附:跨域cookie解决办法】

    使用JavaScript 原生存取cookie代码示例: var cookie = { set : function(name, value, expires, path, domain, secur ...

随机推荐

  1. Making ARC and non-ARC files play nice together

    From Codeography If you want to exclude a file from being compiled with ARC you can do so by setting ...

  2. 动态为页面添加CSS样式文件引用

    动态为页面添加CSS样式文件引用: if (document.createStyleSheet) { //IE document.createStyleSheet("./Themes/Def ...

  3. adb 架构

    adb是什么? adb就是Android调试桥,很形象啊. 先来看adb原理的逻辑图: ADB架构adb由两个物理文件组成:adb/adb.exe运行于PC端,包括Linux.Windows.Mac ...

  4. 网络上可供测试的Web Service

    网络上可供测试的Web Service 腾讯QQ在线状态 WEB 服务Endpoint: http://www.webxml.com.cn/webservices/qqOnlineWebService ...

  5. Linux 目录下属性查看操作

    1. 查看当前目录所有文件和文件夹的大小 方法一: $du -sh * 或 $du -h -d 0 * '-d 0' 代表查询目录的深度为0 ,也就是当前目录,'-d 3' 表示文件目录深度为3,可以 ...

  6. Linux下php安装Redis安装

    1. 下载  redis-2.4.14.tar.gz 2. 解压 tar -zxvf redis-2.4.14.tar.gz 3.cd redis-2.4.14 4. make 注意:出错 1. CC ...

  7. windows 环境下 ping 加时间戳 记日志

    在c盘下面新建文件 ping.vbs 在 ping.vbs中输入代码如下: Dim args, flag, unsuccOut args="" otherout="&qu ...

  8. javascript提取联通个人信息和通话记录的代码

    由于一些巨大的困难,一些后端爬虫改成了前端爬虫. 前端爬虫是只有js语言,后端爬虫有python java nodejs php这些语言. 前端爬虫有window.document对象,在浏览器端的爬 ...

  9. maven打包 jar

    最后更新时间: 2014年11月23日 1. maven-shade-plugin 2. maven-assembly-plugin 3. maven-onejar-plugin maven-shad ...

  10. laravel 5.3升级5.4

    1)修改 composer 配置文件 composer.json 1.如果你用了 laravel-admin,larvel-admin 版本改 1.4.x-dev 2.laravel 版本改 5.4. ...