JSON已經成為了一種非常常見的數據類型,它支持簡潔、結構化的數據表示,并且非常易于解析。當你使用C語言處理JSON數據時,你需要將JSON格式的數據轉換為C語言中的結構體。
#include#include #include #include typedef struct { int id; char name[50]; char email[50]; } person; int main() { char* json_string = "{ \"id\": 1, \"name\": \"Tom\", \"email\": \"tom@example.com\" }"; cJSON* json = cJSON_Parse(json_string); if (json == NULL) { printf("Error parsing JSON\n"); return 1; } person p; p.id = cJSON_GetObjectItem(json, "id")->valueint; strcpy(p.name, cJSON_GetObjectItem(json, "name")->valuestring); strcpy(p.email, cJSON_GetObjectItem(json, "email")->valuestring); cJSON_Delete(json); return 0; }
上面的代碼演示了如何將一個JSON格式的字符串解析為C語言中的person結構體。在這個例子中,我們使用了cJSON第三方庫,它可以幫助我們更輕松地解析JSON數據。
如果你有多個JSON格式的數據需要解析,你可以使用一個for循環來處理它們。
int main() { char* json_string = "[{ \"id\": 1, \"name\": \"Tom\", \"email\": \"tom@example.com\" }, { \"id\": 2, \"name\": \"Jerry\", \"email\": \"jerry@example.com\" }]"; cJSON* json = cJSON_Parse(json_string); if (json == NULL) { printf("Error parsing JSON\n"); return 1; } int count = cJSON_GetArraySize(json); person* people = (person*)malloc(sizeof(person)*count); for (int i = 0; i< count; i++) { cJSON* item = cJSON_GetArrayItem(json, i); people[i].id = cJSON_GetObjectItem(item, "id")->valueint; strcpy(people[i].name, cJSON_GetObjectItem(item, "name")->valuestring); strcpy(people[i].email, cJSON_GetObjectItem(item, "email")->valuestring); } cJSON_Delete(json); return 0; }
在這個例子中,我們有一個JSON數組,里面包含兩個person對象。我們使用一個for循環來遍歷這個數組,并將它們解析為一個person結構體數組。請注意,我們使用了動態內存分配來管理這個數組,因為我們不知道它的大小。
總之,當你需要在C語言中處理JSON格式的數據時,請使用cJSON這樣的第三方庫來幫助你更輕松地處理它們。