问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

cJSON库使用手册:数据解析与处理指南

创作时间:
作者:
@小白创作中心

cJSON库使用手册:数据解析与处理指南

引用
1
来源
1.
https://shuyeidc.com/wp/48060.html

cJSON是一个开源的、用C语言编写的JSON解析库,支持JSON文件的解析和生成。以下是cJSON库的详细使用手册,包括安装、常用函数及示例代码,并附有相关问题与解答。

一、下载和安装

  1. 下载:从GitHub页面下载最新版本的 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);
  1. 添加元素到JSON对象和数组
void cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
void cJSON_AddItemToArray(cJSON *array, cJSON *item);
  1. 创建基本类型的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);
  1. 解析和打印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;
}
  1. 解析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库的使用方法,希望对你有所帮助。如果有任何问题,欢迎留言交流。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号