cJSON的读写
在C语言中,处理JSON数据通常需要借助第三方库,例如cJSON,cJSON是一个轻量级的JSON解析和生成库,适用于小型到中型项目,本文将详细介绍如何使用cJSON进行JSON数据的读取和写入操作。
一、cJSON简介
cJSON是一个使用C语言编写的JSON数据解析器,具有超轻便、可移植、单文件的特点,使用MIT开源协议,cJSON的设计思想是通过结构体表示JSON数据,支持链表操作以便于数据的添加、删除和查找。
二、集成cJSON库
在使用cJSON之前,需要将其源代码集成到项目中,以下是集成步骤:
1、下载cJSON源码:从GitHub仓库下载cJSON源码。
git clone https://github.com/DaveGamble/cJSON.git
2、包含头文件:将cJSON.h
复制到项目目录,并在代码文件中包含该头文件。
#include "cJSON.h"
3、编译链接:确保在编译时链接cJSON的源文件。
gcc -o main main.c cJSON.c
三、创建JSON对象并写入文件
以下是一个完整的示例,演示如何创建一个JSON对象并将其写入文件:
#include <stdio.h> #include <stdlib.h> #include "cJSON.h" void write_json_file(const char* filename) { // 创建一个JSON对象 cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "John"); cJSON_AddNumberToObject(root, "age", 30); cJSON_AddItemToObject(root, "address", cJSON_CreateObject()); cJSON_AddStringToObject(cJSON_GetObjectItem(root, "address"), "country", "China"); cJSON_AddNumberToObject(cJSON_GetObjectItem(root, "address"), "zip-code", 111111); cJSON_AddItemToArray(root, cJSON_CreateString("C")); cJSON_AddItemToArray(root, cJSON_CreateString("Java")); cJSON_AddItemToArray(root, cJSON_CreateString("Python")); cJSON_AddTrueToObject(root, "student"); // 将JSON对象转换为字符串 char *json_str = cJSON_Print(root); // 打开文件并写入JSON字符串 FILE *file = fopen(filename, "w"); if (file != NULL) { fputs(json_str, file); fclose(file); printf("JSON写入文件成功! "); } else { printf("无法打开文件! "); } // 释放内存 cJSON_Delete(root); free(json_str); } int main() { write_json_file("output.json"); return 0; }
四、读取JSON文件并解析数据
以下是一个示例,演示如何从文件中读取JSON数据并进行解析:
#include <stdio.h> #include <stdlib.h> #include "cJSON.h" void read_json_file(const char* filename) { // 打开文件并读取内容 FILE *file = fopen(filename, "r"); if (file == NULL) { printf("无法打开文件! "); return; } // 获取文件大小 fseek(file, 0, SEEK_END); long length = ftell(file); rewind(file); // 分配内存并读取文件内容 char *data = (char *)malloc(length + 1); fread(data, 1, length, file); fclose(file); data[length] = '