C語言是一種強大的編程語言,它由于其高效性和廣泛適用性而備受青睞。JSON作為一種輕量級的數(shù)據(jù)交換格式,由于其易讀性和易解析性也被廣泛應(yīng)用。然而,當JSON的結(jié)構(gòu)變得復雜時,在C語言中解析JSON數(shù)據(jù)將變得困難。本文將介紹如何將復雜JSON數(shù)據(jù)轉(zhuǎn)換為對象。
#include#include #include #include #include "cJSON.h" typedef struct { int id; char name[50]; int age; char address[200]; } Person; void parsePerson(cJSON *personJSON, Person *person) { cJSON *idJSON = cJSON_GetObjectItem(personJSON, "id"); person->id = idJSON->valueint; cJSON *nameJSON = cJSON_GetObjectItem(personJSON, "name"); strncpy(person->name, cJSON_GetStringValue(nameJSON), sizeof(person->name)); cJSON *ageJSON = cJSON_GetObjectItem(personJSON, "age"); person->age = ageJSON->valueint; cJSON *addressJSON = cJSON_GetObjectItem(personJSON, "address"); strncpy(person->address, cJSON_GetStringValue(addressJSON), sizeof(person->address)); } int main() { char *jsonStr = "{\"id\":1,\"name\":\"Tom\",\"age\":24,\"address\":\"123 Main St, Anytown, USA\"}"; cJSON *root = cJSON_Parse(jsonStr); Person person; parsePerson(root, &person); printf("id: %d\n", person.id); printf("name: %s\n", person.name); printf("age: %d\n", person.age); printf("address: %s\n", person.address); cJSON_Delete(root); return 0; }
在這個例子中,我們定義了一個名為Person的結(jié)構(gòu)體,它包含id,name,age和address字段。接下來,我們定義了一個函數(shù)parsePerson,它從JSON對象解析出一個Person對象。
首先,我們使用cJSON_GetObjectItem函數(shù)從JSON對象中獲取id,name,age和address字段。然后,我們使用cJSON_GetStringValue函數(shù)將字符值轉(zhuǎn)換為字符串,并使用strncpy函數(shù)將值復制到我們的Person結(jié)構(gòu)體中。
最后,我們在主函數(shù)中調(diào)用parsePerson函數(shù),并將解析出的Person對象打印出來。需要注意的是,在使用cJSON_Parse函數(shù)將JSON字符串解析為JSON對象后,需要使用cJSON_Delete函數(shù)釋放JSON對象占用的內(nèi)存。
上一篇python 清華園
下一篇python 添加線程