在現代的網站開發中,客戶端與服務端之間的數據交互是必不可少的,而 JSON(JavaScript Object Notation)作為一種輕量級的數據交換格式,被廣泛使用。
C 語言作為一種廣泛使用的編程語言,在處理 JSON 數據時也有很多工具可以選擇,而這里我們主要介紹一個將 JSON 轉換成對象的方法。
#include <stdio.h>
#include <stdlib.h>
#include <jansson.h>
typedef struct {
int id;
char *name;
double score;
} student;
void json2student(json_t *json, student *stu) {
json_t *id, *name, *score;
const char *str;
id = json_object_get(json, "id");
stu->id = json_integer_value(id);
name = json_object_get(json, "name");
str = json_string_value(name);
stu->name = (char *) malloc(sizeof(char) * (strlen(str) + 1));
strcpy(stu->name, str);
score = json_object_get(json, "score");
stu->score = json_real_value(score);
}
int main() {
const char *json_str = "{\"id\": 1, \"name\": \"Alice\", \"score\": 95.5}";
json_error_t error;
json_t *json;
student Alice;
json = json_loads(json_str, 0, &error);
if (!json) {
fprintf(stderr, "Error on line %d: %s\n", error.line, error.text);
return 1;
}
json2student(json, &Alice);
printf("Student info:\n");
printf("Id:%d\nName:%s\nScore:%.2lf\n", Alice.id, Alice.name, Alice.score);
json_decref(json);
free(Alice.name);
return 0;
}
上面的代碼演示了如何將 JSON 字符串轉換成 C 結構體 student 的對象。其中 json2student 函數是關鍵,通過使用 jansson 庫提供的函數,我們可以很方便地取得 JSON 對象的值,并將其存儲在結構體中。在實現時,我們需要傳入一個 json_t 類型的指針和一個結構體實例的指針,這樣可以將 JSON 的值賦值給對應的結構體屬性。
需要注意的是,在我們使用名為 Alice 的學生信息完成轉化后,需要使用函數 json_decref() 來釋放 json 對象,同時需要釋放 name 屬性的空間。
總的來說,將 JSON 轉換成對象是一個很常見的操作,在 C 語言中,通過使用 jansson 庫提供的函數,可以快速高效地完成這個操作。