c 結(jié)構(gòu)體與 json 之間的轉(zhuǎn)換在開發(fā)中經(jīng)常會(huì)使用到。由于 c 結(jié)構(gòu)體的數(shù)據(jù)格式與 json 數(shù)據(jù)格式有所不同,所以需要進(jìn)行相互轉(zhuǎn)換。
在進(jìn)行結(jié)構(gòu)體轉(zhuǎn) json 的時(shí)候,我們可以利用第三方庫,例如 cJSON。
#include <stdio.h>
#include <stdlib.h>
#include <cJSON.h>
typedef struct student {
char name[20];
int age;
char sex[5];
} Student;
int main() {
Student stu = {"Sue", 20, "Female"};
cJSON* root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "name", stu.name);
cJSON_AddNumberToObject(root, "age", stu.age);
cJSON_AddStringToObject(root, "sex", stu.sex);
char* jsonStr = cJSON_Print(root);
printf("%s\n", jsonStr);
return 0;
}
這里我們定義了一個(gè)名為 student 的結(jié)構(gòu)體,包含了姓名、年齡和性別三個(gè)成員變量。我們對(duì)其進(jìn)行轉(zhuǎn)換的過程如下:
- 1. 我們先定義了一個(gè) cJSON 的根節(jié)點(diǎn) root。
- 2. 然后通過 cJSON_AddStringToObject 和 cJSON_AddNumberToObject 來將 stu 的成員變量添加到 root 中。
- 3. 最后我們通過 cJSON_Print 函數(shù)將 root 轉(zhuǎn)為字符串,并打印輸出。
這個(gè)過程比較簡(jiǎn)單,就是利用 cJSON 庫提供的一些函數(shù),將我們的結(jié)構(gòu)體轉(zhuǎn)為 json 格式的字符串。需要注意的是,我們?cè)谑褂?cJSON_AddStringToObject 和 cJSON_AddNumberToObject 函數(shù)的時(shí)候,第一個(gè)參數(shù)要傳入 cJSON 的根節(jié)點(diǎn)。
這樣,我們就完成了結(jié)構(gòu)體轉(zhuǎn) json 的過程。這種方法適用于簡(jiǎn)單的結(jié)構(gòu)體轉(zhuǎn) json,對(duì)于復(fù)雜的結(jié)構(gòu)體或者嵌套結(jié)構(gòu)體的轉(zhuǎn)換,我們需要對(duì)代碼進(jìn)行相應(yīng)修改。