在開發(fā)C語言項(xiàng)目中,經(jīng)常需要將JSON數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的結(jié)構(gòu)體(struct),方便進(jìn)行數(shù)據(jù)處理和存儲。在這篇文章中,我們將介紹如何使用C語言中的第三方庫cJSON來實(shí)現(xiàn)JSON數(shù)據(jù)和結(jié)構(gòu)體之間的轉(zhuǎn)換。
#include <stdio.h>
#include <stdlib.h>
#include <cjson/cJSON.h>
typedef struct {
int id;
char name[50];
float score;
} Student;
int main() {
Student student;
char *json_str = "{\"id\":1,\"name\":\"Tom\",\"score\":90.5}";
cJSON *root = cJSON_Parse(json_str);
if (!root) {
printf("Error parsing JSON: %s\n", cJSON_GetErrorPtr());
return 1;
}
student.id = cJSON_GetObjectItem(root, "id")->valueint;
sprintf(student.name, "%s", cJSON_GetObjectItem(root, "name")->valuestring);
student.score = (float)cJSON_GetObjectItem(root, "score")->valuedouble;
printf("ID: %d\n", student.id);
printf("Name: %s\n", student.name);
printf("Score: %f\n", student.score);
cJSON_Delete(root);
return 0;
}
在上面的代碼中,我們定義了一個名為Student的結(jié)構(gòu)體,包含學(xué)生的ID、姓名和分?jǐn)?shù)。首先,我們需要定義一個JSON格式的字符串,并使用cJSON_Parse函數(shù)將其解析為cJSON對象。我們通過cJSON_GetObjectItem函數(shù)來獲取JSON對象中的每個屬性,然后將它們賦值給結(jié)構(gòu)體成員。
最后,我們使用cJSON_Delete函數(shù)來釋放cJSON對象的內(nèi)存。這樣,就成功地將JSON數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的結(jié)構(gòu)體了。