是什么 ? | : | ultra-lightweight JSON parser library. |
开发语言 | : | C89 |
源码仓库 | : | https://github.com/DaveGamble/cJSON |
操作系统 | 包管理器 | 安装命令 |
---|---|---|
All | vcpkg | vcpkg install cjson vcpkg install cjson:x64-osx vcpkg install cjson:x64-linux vcpkg install cjson:x64-windows |
Android | ndk-pkg | ndk-pkg install cjson |
iOS | xcpkg | xcpkg install cjson |
macOS | HomeBrew | brew install cjson |
GNU/Linux | HomeBrew | brew install cjson |
apt | sudo apt-get install -y cjson | |
CentOS | yum | sudo yum install -y cjson |
dnf | sudo dnf install -y cjson | |
openSUSE | zypper | sudo zypper install -y cjson |
Alpine Linux | apk | sudo apk add cjson |
pacman | sudo pacman -Syyu --noconfirm | |
Gentoo Linux | Portage | sudo emerge cjson |
step1、创建一个项目目录,并进入该目录
mkdir cJSONTest && cd cJSONTest
step2、使用curl命令将cJSON.h
和cJSON.c
两个文件下载到cJSONTest
目录中
curl -LO https://raw.githubusercontent.com/DaveGamble/cJSON/master/cJSON.h
curl -LO https://raw.githubusercontent.com/DaveGamble/cJSON/master/cJSON.c
step3、编写一个C语言源程序cJSONTest.c
,其内容如下
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include"cJSON.h"
int main(int argc, char *argv[]) {
const char *json = "{\
\"name\":\"fpliu\",\
\"age\": 18,\
\"height\": 180.0,\
\"isMale\": true,\
\"images\": [\
\"1.jpg\", \
\"2.png\"\
]\
}";
cJSON *cJSONRoot = cJSON_Parse(json);
if(NULL != cJSONRoot) {
cJSON * child = cJSONRoot->child;
while(NULL != child) {
int type = child->type;
char *valueStr = NULL;
if (cJSON_String == type) {
valueStr = child->valuestring;
} else if(cJSON_Number == type) {
double value = child->valuedouble;
valueStr = cJSON_PrintUnformatted(child);
} else if(cJSON_Array == type) {
valueStr = cJSON_PrintUnformatted(child);
int count = cJSON_GetArraySize(child);
for(int i= 0; i < count; i++) {
cJSON *arrayItem = cJSON_GetArrayItem(child, i);
//递归
}
} else if(cJSON_True == type) {
//TODO
valueStr = cJSON_PrintUnformatted(child);
} else if(cJSON_False == type) {
//TODO
valueStr = cJSON_PrintUnformatted(child);
} else {
valueStr = cJSON_PrintUnformatted(child);
}
int length = strlen(child->string) + strlen(valueStr) + 2;
char tmp[length];
memset(tmp, 0, length);
sprintf(tmp, "%s=%s", child->string, valueStr);
printf("%s\n", tmp);
child = child->next;
}
}
return 0;
}
step4、使用cc命令进行编译
cc -o cJSONTest cJSONTest.c cJSON.c
step5、运行cJSONTest
./cJSONTest
使用cJSON
的时候要特别注意:根据类型使用不同的变量进行取值。如果要使用字符串, 直接调用cJSON_PrintUnformatted(item);
即可。