在使用 cJSON 库时,我们经常需要处理 JSON 数据的接收和解析,cJSON 是一个轻量级的 JSON 解析库,适用于 C 语言开发,它提供了一组简单的 API,用于将 JSON 数据转换为 C 结构体,以及将 C 结构体转换为 JSON 字符串。
假设我们有一个 JSON 数据如下:
{ "name": "John", "age": 30, "is_student": false, "address": { "city": "New York", "zipcode": "10001" }, "courses": ["Math", "Science", "History"] }
我们需要使用 cJSON 库来解析这个 JSON 数据,我们需要包含 cJSON 头文件,并定义一个结构体来表示地址信息:
#include <stdio.h> #include <stdlib.h> #include "cJSON.h" typedef struct { char *city; char *zipcode; } Address; typedef struct { char *name; int age; int is_student; Address address; char **courses; int courses_count; } Person;
我们编写一个函数来解析 JSON 数据并将其填充到 Person 结构体中:
Person parse_json(const char *json_str) { cJSON *json = cJSON_Parse(json_str); if (json == NULL) { const char *error_ptr = cJSON_GetErrorPtr(); if (error_ptr != NULL) { fprintf(stderr, "Error before: %s ", error_ptr); } return (Person){NULL}; } Person person; person.name = cJSON_GetStringValue(cJSON_GetObjectItem(json, "name")); person.age = cJSON_GetNumberValue(cJSON_GetObjectItem(json, "age")); person.is_student = cJSON_IsTrue(cJSON_GetObjectItem(json, "is_student")); cJSON *address_json = cJSON_GetObjectItem(json, "address"); person.address.city = cJSON_GetStringValue(cJSON_GetObjectItem(address_json, "city")); person.address.zipcode = cJSON_GetStringValue(cJSON_GetObjectItem(address_json, "zipcode")); cJSON *courses_json = cJSON_GetArrayItem(cJSON_GetObjectItem(json, "courses")); person.courses = malloc(cJSON_GetArraySize(courses_json) * sizeof(char *)); person.courses_count = cJSON_GetArraySize(courses_json); for (int i = 0; i < person.courses_count; i++) { person.courses[i] = cJSON_GetStringValue(cJSON_GetArrayItem(courses_json, i)); } cJSON_Delete(json); return person; }
在主函数中,我们可以调用这个解析函数并打印解析后的结果:
int main() { const char *json_str = "{"name": "John", "age": 30, "is_student": false, "address": {"city": "New York", "zipcode": "10001"}, "courses": ["Math", "Science", "History"]}"; Person person = parse_json(json_str); printf("Name: %s ", person.name); printf("Age: %d ", person.age); printf("Is student: %d ", person.is_student); printf("City: %s ", person.address.city); printf("Zipcode: %s ", person.address.zipcode); printf("Courses: "); for (int i = 0; i < person.courses_count; i++) { printf(" %s ", person.courses[i]); } // Free allocated memory free(person.courses); return 0; }
FAQs
Q1: 如何安装 cJSON 库?
A1: 你可以通过以下步骤安装 cJSON 库:
1、下载 cJSON 源代码:https://github.com/DaveGamble/cJSON
2、解压下载的文件。
3、进入解压后的目录,编译源代码,在 Linux 系统上,你可以使用以下命令:
gcc -o example example.c cJSON.c -I.
4、运行生成的可执行文件。
Q2: cJSON 支持哪些数据类型?
A2: cJSON 支持以下数据类型:
字符串(char
)
数字(double
)
布尔值(int
)
数组(cJSON
)
对象(cJSON
)
NULL(cJSON_NULL
)
小伙伴们,上文介绍了“cjson接收例子”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1492399.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复