如何使用cjson库进行数据解析与处理?

cJSON是一个开源的、用C语言编写的JSON解析库,支持JSON文件的解析和生成。

cJSON库使用手册

如何使用cjson库进行数据解析与处理?

cJSON 是一个轻量级的 C 语言 JSON 库,用于解析和生成 JSON 数据,以下是 cJSON 库的详细使用手册,包括安装、常用函数及示例代码,并附有相关问题与解答。

一、下载和安装

1、下载:从[GitHub](https://github.com/DaveGamble/cJSON)页面下载最新版本的 cJSON。

2、解压:解压缩下载的文件,将cJSON.ccJSON.h 文件包含到你的项目中。

3、编译:在 Linux 下使用命令gcc test.c cJSON.c -o test -lm 进行编译,确保链接数学库(-lm)。

二、cJSON语法

键值对key:value,如"name":"Jack"

JSON对象:花括号括起来,包含多个键值对,如{"width":1920,"height":1080}

JSON数组:方括号括起来,包含多个值,如["Sunday","Monday","Tuesday"]

值的类型:数字(整数或浮点数)、字符串、布尔值(true/false)、数组、对象、null

如何使用cjson库进行数据解析与处理?

三、cJSON结构体

typedef struct cJSON {
    struct cJSON *next;      // 指向下一个节点的指针
    struct cJSON *prev;      // 指向前一个节点的指针
    struct cJSON *child;     // 子节点指针
    int type;                // 类型
    char *valuestring;       // 字符串值
    int valueint;            // 整数值
    double valuedouble;      // 双精度浮点值
    char *string;            // 键名
} cJSON;

四、创建和操作cJSON的常用函数

1. 创建JSON对象和数组

cJSON *cJSON_CreateObject(void);
cJSON *cJSON_CreateArray(void);

2. 添加元素到JSON对象和数组

void cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
void cJSON_AddItemToArray(cJSON *array, cJSON *item);

3. 创建基本类型的JSON项

cJSON *cJSON_CreateString(const char *string);
cJSON *cJSON_CreateNumber(double num);
cJSON *cJSON_CreateBool(int b);
cJSON *cJSON_CreateNull(void);
cJSON *cJSON_CreateTrue(void);
cJSON *cJSON_CreateFalse(void);

4. 解析和打印JSON字符串

cJSON *cJSON_Parse(const char *value);
char *cJSON_Print(const cJSON *item);
void cJSON_Delete(cJSON *c); // 释放内存

五、示例代码

1. 创建一个JSON对象并添加元素

#include "cJSON.h"
#include <stdio.h>
int main() {
    cJSON *root = cJSON_CreateObject();
    cJSON *name = cJSON_CreateString("Jack");
    cJSON *age = cJSON_CreateNumber(30);
    cJSON_AddItemToObject(root, "name", name);
    cJSON_AddItemToObject(root, "age", age);
    printf("%s
", cJSON_Print(root));
    cJSON_Delete(root);
    return 0;
}

2. 解析JSON字符串

#include "cJSON.h"
#include <stdio.h>
int main() {
    const char *json_string = "{\"name\":\"Jack\",\"age\":30}";
    cJSON *root = cJSON_Parse(json_string);
    if (root == NULL) {
        printf("Error before: [%s]
", cJSON_GetErrorPtr());
    } else {
        printf("%s
", cJSON_Print(root));
        cJSON_Delete(root);
    }
    return 0;
}

六、相关问题与解答

1. cJSON_PrintUnformatted()和cJSON_Print()的区别?

答:

如何使用cjson库进行数据解析与处理?

相同点:两者功能都是将 JSON 对象转换成字符串。

不同点:转换格式不同。cJSON_Print()格式化输出,带有缩进和换行;cJSON_PrintUnformatted()非格式化输出,不包含额外的空格和换行符。

2. 如何解析含有复杂嵌套结构的JSON?

答:

可以通过递归调用cJSON_GetObjectItemcJSON_GetArrayItem 获取嵌套的对象和数组。

#include "cJSON.h"
#include <stdio.h>
int main() {
    const char *json_string = "{\"name\":\"Jack\",\"details\":{\"age\":30,\"city\":\"New York\"}}";
    cJSON *root = cJSON_Parse(json_string);
    cJSON *details = cJSON_GetObjectItem(root, "details");
    cJSON *age = cJSON_GetObjectItem(details, "age");
    printf("Age: %s
", cJSON_Print(age));
    cJSON_Delete(root);
    return 0;
}

小伙伴们,上文介绍了“cjson库使用手册”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/48060.html<

(0)
运维的头像运维
上一篇2025-01-07 00:01
下一篇 2025-01-07 00:09

相关推荐

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注