cJSON库使用手册
cJSON 是一个轻量级的 C 语言 JSON 库,用于解析和生成 JSON 数据,以下是 cJSON 库的详细使用手册,包括安装、常用函数及示例代码,并附有相关问题与解答。
一、下载和安装
1、下载:从[GitHub](https://github.com/DaveGamble/cJSON)页面下载最新版本的 cJSON。
2、解压:解压缩下载的文件,将cJSON.c
和cJSON.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结构体
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()的区别?
答:
相同点:两者功能都是将 JSON 对象转换成字符串。
不同点:转换格式不同。cJSON_Print()
格式化输出,带有缩进和换行;cJSON_PrintUnformatted()
非格式化输出,不包含额外的空格和换行符。
2. 如何解析含有复杂嵌套结构的JSON?
答:
可以通过递归调用cJSON_GetObjectItem
和cJSON_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<