1. 概述:
该demo主要实现linux下JSON配置文件的基本操作,解析
引用cJSON库的地址为:https://github.com/DaveGamble/cJSON
2. 测试:
/*
demo_cjson.c
cjson demo : JSON文件的解析功能
引用 cJSON.h cJSON.c
github 地址 : https://github.com/DaveGamble/cJSON
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "cJSON.h"
void doit(char * text)
{
int i = 0, j = 0;
char * out = NULL;
cJSON * json = NULL;
json = cJSON_Parse(text);
if (!json) {
printf("Error before: [%s]\n", cJSON_GetErrorPtr());
}
else{
out = cJSON_Print(json);
printf("%s\n\n", out);
free(out);
out = NULL;
cJSON * json_province = cJSON_GetArrayItem(json, 0);
out = cJSON_Print(json_province);
printf("%s\n", out);
free(out);
printf("name = %s\n\n", cJSON_GetObjectItem(json, "name")->valuestring);
cJSON * json_area = cJSON_GetArrayItem(json, 1);
out = cJSON_Print(json_area);
printf("%s\n", out);
free(out);
for(i = 0; i < cJSON_GetArraySize(json_area); i ++){
cJSON * json_city = cJSON_GetArrayItem(json_area, i);
if(NULL == json_city){
continue;
}
out = cJSON_Print(json_city);
printf("%s\n", out);
free(out);
for(j = 0; j < cJSON_GetArraySize(json_city); j ++ ){
cJSON * Citylist = cJSON_GetArrayItem(json_city, j);
if(NULL == Citylist){
continue;
}
printf("Citylist[%d] : %s\n", j, Citylist->valuestring);
}
}
cJSON_Delete(json);
}
}
void dofile(char * filename)
{
FILE * file = NULL;
long len = 0;
char * data = NULL;
file = fopen(filename, "rb");
fseek(file, 0, SEEK_END);
len = ftell(file);
fseek(file, 0, SEEK_SET);
data=(char*)malloc(len + 1);
fread(data, 1, len, file);
fclose(file);
doit(data);
free(data);
return ;
}
int main(int argc, char **argv){
dofile("./cjson");
return 0;
}
#Makefile
CC := gcc
AR := ar
all:
$(CC) -c cJSON.c -o cJSON.o -Wall -Werror
$(AR) cr libcJSON.a cJSON.o
#-L 指定库的路径 -l 指定需连接的库名
#-Wl,-Bstatic指示跟在后面的-lxxx选项链接的都是静态库
#-Wl,-Bdynamic指示跟在后面的-lxxx选项链接的都是动态库
$(CC) demo_cjson.c -o demo_cjson -lm -L. -Wl,-Bstatic -lcJSON -Wl,-Bdynamic -Wall -Werror
clean:
rm demo_cjson *.o *.a
{
"name": "黑龙江",
"cities": {
"city": ["哈尔滨", "大庆"]
}
}
UDP # 前序 UDP用户数据报协议没有连接的是面向数据报的是不可靠 # 套接字 就是 ...
Alex想要改变世界的007程序员。 背景双非本科计算机科班生大三下其实本来我是图...
tmux 是一个类似于 Screen 终端复用的工具,它能够在终端出现意外的情况下,确保...
OFDM科普 OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术...
本文转载自微信公众号「Java极客技术」,作者鸭血粉丝 。转载本文请联系Java极客...
普通的替换函数 复制代码 代码如下: public function HighLight(S,F) dim tL,tM,...
Jsp自定义标签和方法详解 首先是要有一个标签处理类,标签处理类可以直接实现Tag...
在Web开发中我们经常需要实现定时刷新某个页面: 1.来保持session的值或者检查se...
65 哥已经工作两年了,一直做着简单重复的编程工作,活活熬成了一个只会 CRUD 的...
1. SQL语句执行步骤 语法分析 语义分析 视图转换 表达式转换 选择优化器 选择连...