c,#include,#include "cJSON.h",,int main() {, const char *data = "{"name": "John", "age": 30}";, cJSON *json = cJSON_Parse(data);, if (json == NULL) {, printf("Error parsing JSON,");, return 1;, }, cJSON *name = cJSON_GetObjectItemCaseSensitive(json, "name");, if (cJSON_IsString(name) && (name->valuestring != NULL)) {, printf("Name: %s,", name->valuestring);, }, cJSON *age = cJSON_GetObjectItemCaseSensitive(json, "age");, if (cJSON_IsNumber(age)) {, printf("Age: %d,", age->valueint);, }, cJSON_Delete(json);, return 0;,},
``cJSON 是一个开源的 JSON 库,用于解析、生成和操作 JSON 数据,它非常轻量级,易于使用,并且提供了丰富的 API 来处理 JSON 对象和数组,下面我将通过一个具体的例子来展示如何使用 cJSON 接收和处理 JSON 数据。
示例场景
假设我们有一个服务器端返回的 JSON 字符串,表示用户的个人信息,包括姓名、年龄和邮箱地址,我们需要使用 cJSON 来解析这个 JSON 字符串,并提取其中的信息。
JSON 字符串示例
{ "name": "John Doe", "age": 30, "email": "john.doe@example.com" }
使用 cJSON 解析 JSON 数据的步骤
1. 包含 cJSON 头文件
确保你的项目中包含了 cJSON 的头文件cJSON.h
。
2. 定义 JSON 字符串
const char *json_string = "{"name": "John Doe", "age": 30, "email": "john.doe@example.com"}";
3. 解析 JSON 字符串
使用cJSON_Parse
函数将 JSON 字符串解析为一个 cJSON 对象。
cJSON *root = cJSON_Parse(json_string); if (root == NULL) { const char *error_ptr = cJSON_GetErrorPtr(); if (error_ptr != NULL) { fprintf(stderr, "Error before: %s ", error_ptr); } goto end; }
4. 提取数据
使用 cJSON 提供的 API 来访问 JSON 对象中的数据。
const cJSON *name = cJSON_GetObjectItemCaseSensitive(root, "name"); if (cJSON_IsString(name) && (name->valuestring != NULL)) { printf("Name: %s ", name->valuestring); } const cJSON *age = cJSON_GetObjectItemCaseSensitive(root, "age"); if (cJSON_IsNumber(age)) { printf("Age: %d ", age->valueint); } const cJSON *email = cJSON_GetObjectItemCaseSensitive(root, "email"); if (cJSON_IsString(email) && (email->valuestring != NULL)) { printf("Email: %s ", email->valuestring); }
5. 释放内存
在完成对 JSON 数据的处理后,需要释放 cJSON 对象占用的内存。
end: cJSON_Delete(root);
完整代码示例
以下是完整的 C 语言代码示例,展示了如何使用 cJSON 解析上述 JSON 字符串并提取数据。
#include <stdio.h> #include <stdlib.h> #include "cJSON.h" int main() { // JSON 字符串 const char *json_string = "{"name": "John Doe", "age": 30, "email": "john.doe@example.com"}"; // 解析 JSON 字符串 cJSON *root = cJSON_Parse(json_string); if (root == NULL) { const char *error_ptr = cJSON_GetErrorPtr(); if (error_ptr != NULL) { fprintf(stderr, "Error before: %s ", error_ptr); } return EXIT_FAILURE; } // 提取数据 const cJSON *name = cJSON_GetObjectItemCaseSensitive(root, "name"); if (cJSON_IsString(name) && (name->valuestring != NULL)) { printf("Name: %s ", name->valuestring); } const cJSON *age = cJSON_GetObjectItemCaseSensitive(root, "age"); if (cJSON_IsNumber(age)) { printf("Age: %d ", age->valueint); } const cJSON *email = cJSON_GetObjectItemCaseSensitive(root, "email"); if (cJSON_IsString(email) && (email->valuestring != NULL)) { printf("Email: %s ", email->valuestring); } // 释放内存 cJSON_Delete(root); return EXIT_SUCCESS; }
FAQs
Q1: JSON 字符串格式不正确,cJSON 会如何处理?
A1: JSON 字符串格式不正确,cJSON_Parse
将返回NULL
,并可以通过cJSON_GetErrorPtr
获取错误信息,你应该检查返回值是否为NULL
,并根据错误信息进行相应的错误处理。
Q2: cJSON 支持哪些数据类型?
A2: cJSON 支持 JSON 标准中的所有基本数据类型,包括字符串(string
)、数字(number
,可以是整数或浮点数)、布尔值(boolean
)、空值(null
)、对象(object
)和数组(array
),它还支持嵌套的数据结构,例如对象中可以包含数组,数组中可以包含对象等。
小编有话说
cJSON 是一个非常强大的工具,用于处理 JSON 数据,它不仅提供了简单的 API 来解析和生成 JSON,还允许你轻松地遍历和修改 JSON 数据结构,无论是在嵌入式系统、游戏开发还是网络编程中,cJSON 都是一个值得信赖的选择,希望本文能够帮助你更好地理解和使用 cJSON,让你的数据处理工作更加高效和便捷。
以上内容就是解答有关“cjson 接收例子”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/810223.html