在C語(yǔ)言中,我們可以使用第三方庫(kù)cJSON來(lái)解析JSON字符串,然后使用循環(huán)語(yǔ)句來(lái)取出其中的鍵值對(duì)。
#include <stdio.h> #include <cJSON.h> int main() { char *jsonStr = "{\"name\": \"張三\", \"age\": 25, \"hobby\": [\"籃球\", \"足球\"]}"; cJSON *json = cJSON_Parse(jsonStr); if (json == NULL) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return 1; } cJSON *item = NULL; cJSON_ArrayForEach(item, json) { if (cJSON_IsString(item)) { printf("%s: %s\n", item->string, item->valuestring); } else if (cJSON_IsNumber(item)) { printf("%s: %d\n", item->string, item->valueint); } else if (cJSON_IsArray(item)) { printf("%s:\n", item->string); cJSON *hobby = NULL; cJSON_ArrayForEach(hobby, item) { printf("- %s\n", hobby->valuestring); } } } cJSON_Delete(json); return 0; }
在上面的代碼中,我們首先定義了一個(gè)JSON字符串,然后使用cJSON_Parse函數(shù)將其轉(zhuǎn)換為cJSON結(jié)構(gòu)體。接著使用cJSON_ArrayForEach宏遍歷JSON對(duì)象中的所有元素,針對(duì)每個(gè)元素,我們根據(jù)其類型進(jìn)行處理,并使用item->string來(lái)獲取鍵的名稱,item->valuestring或item->valueint來(lái)獲取對(duì)應(yīng)的值。
如果遇到數(shù)組類型的值,我們還需要使用cJSON_ArrayForEach宏來(lái)遍歷其中的所有元素,獲取每個(gè)元素的值。
最后,我們需要使用cJSON_Delete函數(shù)來(lái)釋放內(nèi)存,防止內(nèi)存泄漏。