C語言中結構體的定義是存儲一組相關變量的數據類型。在某些場景下需要將結構體轉化為JSON格式進行傳輸和存儲,或者將JSON數據解析成結構體進行處理。本篇文章將介紹如何實現C結構體與JSON互轉。
首先,我們需要引入JSON解析庫。常用的有cJSON和jansson。這里以cJSON為例。
#include "cJSON.h"
將結構體轉化為JSON:
typedef struct Person {
char name[20];
int age;
} Person;
void structToJSON(Person *person) {
cJSON *root = cJSON_CreateObject();
cJSON_AddItemToObject(root, "name", cJSON_CreateString(person->name));
cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(person->age));
printf("%s", cJSON_Print(root)); // 打印JSON字符串
cJSON_Delete(root); // 釋放內存
}
上述代碼首選定義了一個結構體Person,然后使用cJSON_CreateObject函數創建一個空JSON對象。接著使用cJSON_AddItemToObject函數將變量name和age加入JSON對象中。最后使用cJSON_Print將JSON對象轉換為字符串并打印出來。
將JSON轉化為結構體:
Person* JSONToStruct(const char* jsonString) {
cJSON *root = cJSON_Parse(jsonString);
Person *person = (Person*)malloc(sizeof(Person));
char* name = cJSON_GetObjectItem(root, "name")->valuestring;
int age = cJSON_GetObjectItem(root, "age")->valueint;
strcpy(person->name, name);
person->age = age;
cJSON_Delete(root);
return person;
}
此處使用cJSON_Parse函數將JSON字符串解析成JSON對象,然后根據JSON對象中的name和age獲取其對應的值,再使用strcpy和賦值語句將值拷貝到Person結構體的變量中。最后釋放內存后返回Person指針。
最后,需要注意的是,結構體中的變量名應與JSON中的鍵名保持一致。
上一篇vue.jsapp項目
下一篇vue.jsset用法