在開發(fā)中,經(jīng)常需要將JSON數(shù)據(jù)轉(zhuǎn)換為實(shí)體類,使用C語言可以方便快捷地實(shí)現(xiàn)這一過程。下面是代碼示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <jansson.h> typedef struct { char* name; int age; float score; char* address; } Student; Student* json_to_student(char* json_str) { json_error_t error; json_t* root = json_loads(json_str, 0, &error); Student* student = (Student*)malloc(sizeof(Student)); student->name = (char*)json_string_value(json_object_get(root, "name")); student->age = json_integer_value(json_object_get(root, "age")); student->score = json_real_value(json_object_get(root, "score")); student->address = (char*)json_string_value(json_object_get(root, "address")); json_decref(root); return student; } int main() { char* json_str = "{\"name\": \"Tom\", \"age\": 18, \"score\": 87.5, \"address\": \"Beijing\"}"; Student* student = json_to_student(json_str); printf("Name: %s\nAge: %d\nScore: %.1f\nAddress: %s\n", student->name, student->age, student->score, student->address); free(student); return 0; }
這段代碼使用了 jansson 庫來解析JSON字符串,將解析得到的每個屬性值賦給了 Student 結(jié)構(gòu)體的相應(yīng)字段,最后返回轉(zhuǎn)換后的 Student 實(shí)例。
當(dāng)然,使用第三方庫會增加程序的復(fù)雜度,也會影響程序運(yùn)行效率。如果需要解析的 JSON 數(shù)據(jù)結(jié)構(gòu)比較簡單,也可以手動解析。
在手動解析時(shí),常用的方法是遍歷 JSON 葉子節(jié)點(diǎn),根據(jù)鍵名來填充實(shí)體類字段,使用 C 語言庫函數(shù)的字符串操作函數(shù)來分離字符串。
無論使用哪種方式,JSON 數(shù)據(jù)轉(zhuǎn)換后的實(shí)體類在 C 語言中都可以方便地進(jìn)行操作和傳遞。