cJson 创建 读取

简介: 关于c语言操作json,cjson还挺好用,许多操作已经帮开发员封装好了,使用起来很方便。资源下载地址为:http://sourceforge.net/projects/cjson/在test.c文件中已经有很多例子,看了还不会使用可以直接看cjson.

关于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;
}

相关文章
|
11月前
|
API 数据安全/隐私保护 开发者
京东商品评论数据接口(JD.item_review)丨京东API接口指南
京东商品评论数据接口(JD.item_review)让开发者获取京东商品的评论列表、内容、时间、买家昵称等详细信息,助力产品优化和市场研究。使用步骤包括注册京东开发者账号、创建应用并申请API权限、获取API密钥、阅读API文档,最后通过HTTP请求调用接口获取数据。示例代码展示了如何使用Python进行请求。
1089 9
|
网络安全 Windows
在Windows电脑上启动并配置SSH服务
在Windows电脑上启动并配置SSH服务
4743 0
|
缓存 Java 数据库连接
Java开发者必备:Hibernate与JPA在企业级应用中的最佳实践
【6月更文挑战第25天】Java企业开发常用Hibernate和JPA,两者通过ORM简化数据库操作,提升开发效率。它们支持复杂查询,具有良好的可扩展性。最佳实践中,应注意映射配置的合理性,优化查询性能,利用缓存提升性能,以及妥善管理事务。示例代码展示了使用JPA进行分页查询的方法。
199 0
|
小程序
uniapp 实现当前页面分享至微信好友或朋友圈功能(带参数和无参数)
uniapp 实现当前页面分享至微信好友或朋友圈功能(带参数和无参数)
3140 0
|
存储 NoSQL 大数据
谷歌三件套 - Bigtable
谷歌三件套 - Bigtable
245 1
谷歌三件套 - Bigtable
|
开发框架 .NET 开发工具
【专栏】深入剖析 .NET 技术的奥秘
【4月更文挑战第29天】本文探讨了.NET技术如何以其统一编程模型、高效开发工具和活跃的开源生态成为首选的软件开发平台。.NET的统一模型支持多语言协作,CLR提供跨语言交互,而Visual Studio和.NET Core CLI则优化了开发流程。随着.NET 5和6的进化及开源社区的支持,.NET展现出广阔的发展前景,对开发者而言,掌握.NET至关重要。
92 0
|
前端开发 Python
Flask中的CORS解决方案
前端与后端分处不同的域名,这就涉及到跨域访问数据的问题,因为浏览器的同源策略,默认是不支持两个不同域间相互访问数据,而我们需要在两个域名间相互传递数据,这时我们就要为后端添加跨域访问的支持
435 1
|
NoSQL 前端开发 Linux
VMware上redis的安装
本人小白一个,刚参加工作,由于工作需要,研究了一下redis的安装和使用,如果写的不对的地方,还望前辈多多指正。
469 0
VMware上redis的安装
|
算法
基于爬山优化算法的三维曲面极值搜索matlab仿真
基于爬山优化算法的三维曲面极值搜索matlab仿真
431 0
|
NoSQL Redis Ruby
Windows下搭建Redis集群
原文:Windows下搭建Redis集群  Redis集群:  如果部署到多台电脑,就跟普通的集群一样;因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用率。
1674 1