cJSON库使用手册:数据解析与处理指南
创作时间:
作者:
@小白创作中心
cJSON库使用手册:数据解析与处理指南
引用
1
来源
1.
https://shuyeidc.com/wp/48060.html
cJSON是一个开源的、用C语言编写的JSON解析库,支持JSON文件的解析和生成。以下是cJSON库的详细使用手册,包括安装、常用函数及示例代码,并附有相关问题与解答。
一、下载和安装
- 下载:从GitHub页面下载最新版本的 cJSON。
- 解压:解压缩下载的文件,将
cJSON.c
和
cJSON.h
文件包含到你的项目中。 - 编译:在 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的常用函数
- 创建JSON对象和数组
cJSON *cJSON_CreateObject(void);
cJSON *cJSON_CreateArray(void);
- 添加元素到JSON对象和数组
void cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
void cJSON_AddItemToArray(cJSON *array, cJSON *item);
- 创建基本类型的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);
- 解析和打印JSON字符串
cJSON *cJSON_Parse(const char *value);
char *cJSON_Print(const cJSON *item);
void cJSON_Delete(cJSON *c); // 释放内存
五、示例代码
- 创建一个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;
}
- 解析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;
}
六、相关问题与解答
- cJSON_PrintUnformatted()和cJSON_Print()的区别?
答:
相同点:两者功能都是将 JSON 对象转换成字符串。
不同点:转换格式不同。
cJSON_Print()
格式化输出,带有缩进和换行;
cJSON_PrintUnformatted()
非格式化输出,不包含额外的空格和换行符。 - 如何解析含有复杂嵌套结构的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库的使用方法,希望对你有所帮助。如果有任何问题,欢迎留言交流。
热门推荐
商业航天又一省级计划出炉!
常见便血的原因有哪些
凉皮的热量高吗
如何克服攀比心理:5个实用建议
甲减甲亢怎么区分
秋冬季节,游泳前的热身特别重要
商品质量问题下的退款退货权利与法律保障
中央生态环保督察信号!建筑垃圾可能是一门好生意
如何向周围人寻求支持和帮助?产后抑郁症的亲子关系如何调整?
短视频乱象调查:人设造假,文案雷同,引流挣钱,涉嫌传销
乡村不是城市缩小版,乡村振兴要探索反城市化发展路径
浙工新村正式交付!全省首个自主更新小区,“建得比效果图还好”
如何提高足球步频技巧?(掌握关键动作,提升速度与灵活性)
方大同去世!病中仍不懈创作,享受生活
地支对应的十二生肖解析,天干地支的阳阴划分
口腔科氢氧化钙的临床应用
世界最大!地下700米的“玻璃球”是怎样捕获中微子的?
江南忆最忆是杭州翻译、赏析、拼音版读音、字词解释(白居易忆江南)
宠物美容师被狗咬伤眼睛血流不止:有心理阴影已离职
华夏,简单两个字,却隐含着一个伟大民族的发展史,你怎么看?
《棋魂》第1集分集剧情介绍
龙抬头的来历:从天文学到民间信仰
γ-氨基丁酸(GABA)市场规模不断增长 食品加工以及医药制造领域为其主要需求端
婚生子女与非婚生子女区别及抚恤金分配原则
法定数字货币与加密货币:法律框架下的解析
NS2首发购买指南:版本选择与注意事项全解析
胸口很紧绷怎么回事
如何通过八字看学业
用"我语言"代替"你语言",让亲子沟通更顺畅
女性励志名言