江门网站建设工作,wordpress开启vip会员查看,网站的宣传推广,免费虚拟机安卓版json JSON#xff08;JavaScript Object Notation#xff09;是一种轻量级的数据交换格式#xff0c;广泛用于前后端数据传输和存储。在C语言中#xff0c;我们可以使用cjson库来处理JSON数据。本问总结了在使用cjson库中各个常用API的用法#xff0c;包括组装JSON#x…json JSONJavaScript Object Notation是一种轻量级的数据交换格式广泛用于前后端数据传输和存储。在C语言中我们可以使用cjson库来处理JSON数据。本问总结了在使用cjson库中各个常用API的用法包括组装JSON包括对象、数组、字符串等以及解析JSON解析对象、数组、字符串等。
1. cjson库简介 cjson是一个轻量级的C语言库用于处理JSON数据。它提供了简单易用的API能够方便地将C语言中的数据转换成JSON格式以及将JSON格式的数据解析成C语言中的数据。
2. JSON对象的组装
2.1 组装JSON对象 要组装一个JSON对象可以使用以下API
//先创建一个cJSON对象头指针
cJSON *cJSON_CreateObject(void);
//添加一个对象到另一个对象实现嵌套
void cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);注意事项
在调用cJSON_CreateObject后返回的指针需要通过cJSON_Delete进行内存释放以防止内存泄漏。使用cJSON_AddItemToObject将各个子项添加到JSON对象中其中string是子项的键名item是子项的值可以是数字、字符串、数组等其他JSON类型。
示例 { “age”:30 “name” :“John” “is_student”:1 } #include stdio.h
#include cJSON.hint main() {// 组装JSON对象cJSON *jsonObj cJSON_CreateObject();// 添加数字到JSON对象中cJSON_AddNumberToObject(jsonObj, age, 30);// 添加字符串到JSON对象中cJSON_AddStringToObject(jsonObj, name, John);// 添加布尔值到JSON对象中这里用1表示truecJSON_AddBoolToObject(jsonObj, is_student, 1);// 将JSON对象转换成字符串会开辟一个新内存调用此函数记得手动释放char *jsonStr cJSON_Print(jsonObj);printf(JSON Object:\n%s\n, jsonStr);// 释放JSON对象的内存cJSON_Delete(jsonObj);// 释放JSON字符串的内存free(jsonStr);return 0;
}
2.2 组装JSON数组
要组装一个JSON数组可以使用以下API
cJSON *cJSON_CreateArray(void);
void cJSON_AddItemToArray(cJSON *array, cJSON *item);注意事项
在调用cJSON_CreateArray后返回的指针需要通过cJSON_Delete进行内存释放以防止内存泄漏。如果将cJSON_CreateArray数组对象添加到其他对象中作为子对象时只需释放总JSON头部即可。使用cJSON_AddItemToArray将各个子项添加到JSON数组中item是子项的值可以是数字、字符串、对象等其他JSON类型。
示例 { “logList”: [{ “logName”: “f1”, “logSize”: 1357, “logTime”: “2023-07-24 15:19:25” } …//可添加 ] } #include stdio.h
#include cJSON.hint main() {// 创建 JSON 格式的根对象cJSON *root cJSON_CreateObject();cJSON *jsonArray cJSON_CreateArray();//创建子对象cJSON *logEntry cJSON_CreateObject();cJSON_AddStringToObject(logEntry, logName, filename);cJSON_AddStringToObject(logEntry, logSize, 100);cJSON_AddStringToObject(logEntry, logTime,2023-07-24 15:19:25);//对象的相互嵌套不受顺序影响//将logentry插入到jsonarray数组中cJSON_AddItemToArray(jsonArray , logEntry);//将数组插入到跟对象cJSON_AddItemToObject(root, jsonArray , jsonArray );char *jsonStr cJSON_Print(root);printf(JSON Array:\n%s\n, jsonStr);cJSON_Delete(root); // 释放root内存free(jsonStr); // 释放jsonStr内存return 0;
}3. JSON对象的解析
3.1 解析JSON对象
要解析JSON中的对象可以使用以下API
cJSON *cJSON_Parse(const char *value);
cJSON *cJSON_GetObjectItem(const cJSON *object, const char *string);注意事项
在调用cJSON_Parse后返回的指针需要通过cJSON_Delete进行内存释放以防止内存泄漏。使用cJSON_GetObjectItem根据键名获取JSON对象中的子项。
示例 { “age”:30 “name” :“John” “is_student”:true } #include stdio.h
#include cJSON.hint main() {const char *jsonStr {\name\:\John\,\age\:30,\is_student\:true};cJSON *jsonObj cJSON_Parse(jsonStr);if (jsonObj ! NULL) {//解析跟每个子对象的顺序无关cJSON *nameObj cJSON_GetObjectItem(jsonObj, name);cJSON *ageObj cJSON_GetObjectItem(jsonObj, age);cJSON *isStudentObj cJSON_GetObjectItem(jsonObj, is_student);if (nameObj ! NULL cJSON_IsString(nameObj)) {printf(Name: %s\n, nameObj-valuestring);}if (ageObj ! NULL cJSON_IsNumber(ageObj)) {printf(Age: %d\n, ageObj-valueint);}if (isStudentObj ! NULL cJSON_IsBool(isStudentObj)) {printf(Is Student: %s\n, isStudentObj-valueint ? true : false);}cJSON_Delete(jsonObj); // 释放jsonObj内存} else {printf(JSON parsing failed!\n);}return 0;
}3.2 解析JSON数组
要解析JSON中的数组可以使用以下API
cJSON *cJSON_Parse(const char *value);
cJSON *cJSON_GetArrayItem(const cJSON *array, int index);注意事项
在调用cJSON_Parse后返回的指针需要通过cJSON_Delete进行内存释放以防止内存泄漏。使用cJSON_GetArrayItem根据索引获取JSON数组中的子项。
示例 { [ apple, 123, true ] } #include stdio.h
#include cJSON.hint main() {const char *jsonStr [\apple\, 123, true];cJSON *jsonArray cJSON_Parse(jsonStr);if (jsonArray ! NULL cJSON_IsArray(jsonArray)) {int arraySize cJSON_GetArraySize(jsonArray);for (int i 0; i arraySize; i) {cJSON *item cJSON_GetArrayItem(jsonArray, i);if (cJSON_IsString(item)) {printf(Array Item %d: %s\n, i, item-valuestring);} else if (cJSON_IsNumber(item)) {printf(Array Item %d: %d\n, i, item-valueint);} else if (cJSON_IsBool(item)) {printf(Array Item %d: %s\n, i, item-valueint ? true : false);}}cJSON_Delete(jsonArray); // 释放jsonArray内存} else {printf(JSON parsing failed!\n);}return 0;
}