当前位置:首页 > 行业动态 > 正文

如何通过CJSON库接收数据示例?

在使用 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 库:

如何通过CJSON库接收数据示例?

1、下载 cJSON 源代码:https://github.com/DaveGamble/cJSON

2、解压下载的文件。

3、进入解压后的目录,编译源代码,在 Linux 系统上,你可以使用以下命令:

   gcc -o example example.c cJSON.c -I.

4、运行生成的可执行文件。

Q2: cJSON 支持哪些数据类型?

如何通过CJSON库接收数据示例?

A2: cJSON 支持以下数据类型:

字符串(char

数字(double

布尔值(int

数组(cJSON

如何通过CJSON库接收数据示例?

对象(cJSON

NULL(cJSON_NULL

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