cJSON
1.1、cJSON简介
是什么 ?:ultra-lightweight JSON parser library.
开发语言:C89
源码仓库:https://github.com/DaveGamble/cJSON
1.2、通过包管理器安装cJSON
操作系统包管理器安装命令
Allvcpkg
vcpkg install cjson
vcpkg install cjson:x64-osx
vcpkg install cjson:x64-linux
vcpkg install cjson:x64-windows
Androidndk-pkgndk-pkg install cjson
iOSxcpkgxcpkg install cjson
macOSHomeBrewbrew install cjson
GNU/LinuxHomeBrewbrew install cjson
aptsudo apt-get install -y cjson
CentOSyumsudo yum install -y cjson
dnfsudo dnf install -y cjson
openSUSEzyppersudo zypper install -y cjson
Alpine Linuxapksudo apk add cjson

Arch Linux

ArcoLinux

Manjaro Linux

pacmansudo pacman -Syyu --noconfirm
sudo pacman -S    --noconfirm cjson
Gentoo LinuxPortagesudo emerge cjson
1.3、通过编译源码安装cJSON
1.4、cJSON中包含的头文件
1.5、cJSON中包含的库文件
  • libcjson.{a | so | dylib}
  • libcjson_utils.{a | so | dylib}
1.6、cJSON的综合使用案例

step1、创建一个项目目录,并进入该目录

mkdir cJSONTest && cd cJSONTest

step2、使用curl命令将cJSON.hcJSON.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);即可。