C语言调用cJSON库解析json

一、源代码文件下载
    自己使用时可以只需要其中的cJSON.c和cJSON.h文件就可以了,只需要将cJSON和自己的main文件一起编译即可。
    下载地址:cJSONFiles.zip-互联网文档类资源-CSDN下载

二、重要的接口函数:
    1.cJSON *cJSON_Parse(const char *value);
    解析JSON数据包,并按照cJSON结构体的结构序列化整个数据包。可以看做是获取一个句柄。

    2.cJSON *cJSON_GetObjectItem(cJSON *object,const char *string);
    功能:获取json指定的对象成员
    参数:*objec:第一个函数中获取的句柄。
          string:需要获取的对象
    返回值:这个对象成员的句柄  如果json格式的对象成员直接就是字符串那么就可以直接通过结构体中的valuestring元素来获取这个成员的值

    3.cJSON *cJSON_GetArrayItem(cJSON *array,int item);
    功能:有可能第二个函数中获取到的是成员对象值是一个数组,那么就需要用到这个函数。用来获取这个数组指定的下标对象
    参数:*array:传入第二步中返回的值
    item:想要获取这个数组的下标元素
    返回值:这个数组中指定下标的对象。然后在对这个返回值重复使用第二步函数就可以获取到各个成员的值了。
    也就是说对象是数组的比是字符串的要多用一个cJSON_GetArrayItem函数,其他的没区别。

    4.cJSON_Delete()
    用来释放你第一步获取的句柄,来释放整个内存。用在解析完后调用

三、介绍完了下面就看实例
    1.用于解析的json结构,这里我使用配置文件保存的json结构,然后解析这个配置文件。用于测试json结构如下:

{"syslog_db":[{"db_user":"xxx","db_password":"yyy","db_type":"ORACLE","db_ip":"172.16.1.248","db_port":"1521","db_name":"orcl","sql":"select * from syslog"}],
"syslog_source":[{"send_ip":"172.0.0.8","send_port":"8","send_protocal":"TCP"}],
"syslog_enable":"1"
}

    2.三个大的对象分别有两个是数组一个是直接可以获取的。代码如下:

#include <stdio.h>
#include "cJSON.h"

int main() {
    FILE            *fp = NULL;
    cJSON           *json;
    char            *out;
    char            line[1024] = {0};

    if(NULL != (fp = fopen("./test.ply", "r"))) {
        while (NULL != fgets(line, sizeof(line), fp)) {
            json=cJSON_Parse(line); //获取整个大的句柄
            out=cJSON_Print(json);  //这个是可以输出的。为获取的整个json的值
            cJSON *arrayItem = cJSON_GetObjectItem(json,"syslog_db"); //获取这个对象成员
            cJSON *object = cJSON_GetArrayItem(arrayItem,0);   //因为这个对象是个数组获取,且只有一个元素所以写下标为0获取

        /*下面就是可以重复使用cJSON_GetObjectItem来获取每个成员的值了*/
            cJSON *item = cJSON_GetObjectItem(object,"db_user");  //
            printf("db_user:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"db_password");
            printf("db_password:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"db_type");
            printf("db_type:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"db_ip");
            printf("db_ip:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"db_port");
            printf("db_port:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"db_name");
            printf("db_name:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"sql");
            printf("db_sql:%s\n",item->valuestring);


       /*这里这个是直接可以获取值的*/
            arrayItem = cJSON_GetObjectItem(json,"syslog_enable");
            printf("%s\n",arrayItem->valuestring);
        }
    }
        cJSON_Delete(json);
    close(fp);
}

四、编译

gcc  test_s.c cJSON.c -o test_s -lm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leonban

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值