1.程序源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <cjson.h>
/*计算文件大小*/
int file_size(char *filename)
{
FILE *fp = fopen(filename,"r");
int size = 0;
if(!fp)
return -1;
fseek(fp,0L,SEEK_END);
size = ftell(fp);
fclose(fp);
return size;
}
int read_all(char *src_file, char *buf, int size)
{
FILE *fp = fopen(src_file,"r");
int i = 0;
if(fp < 0)
return -1;
for(i=0; !feof(fp) && i<size; i++)
{
buf[i] = fgetc(fp);
}
buf[i] = 0x00;
fclose(fp);
return i;
}
int main()
{
FILE *fp = NULL;
cJSON *json = NULL;
char *filename = "./exapmle.json";
char *out;
char *buf = NULL;
int len = file_size(filename);
if(len <= 0)
return -1;
buf = malloc(len+1);
if(buf == NULL)
{
printf("内存不足\n");
return -1;
}
len = read_all("./1.json", buf, len);
json = cJSON_Parse(buf);
if(!json)
{
printf("Error before: [%s]\n",cJSON_GetErrorPtr());
return -1;
}
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);
free(buf);
return 0;
}
2.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"
}
4.编译源码
$ gcc -o example example.c -L$HOME/local/lib -lcjson
5.运行程序
$ ./example
db_user:xxx
db_password:yyy
db_type:ORACLE
db_ip:172.16.1.248
db_port:1521
db_name:orcl
db_sql:select * from syslog
1
网友评论