隨著互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)的快速發(fā)展,前后端分離的開發(fā)模式愈發(fā)成熟,同時也推動了前端技術的快速發(fā)展,JSON作為一種輕量級的數(shù)據(jù)交互格式,很受前端開發(fā)人員的喜愛。在使用C語言操作JSON數(shù)據(jù)時,經(jīng)常需要遍歷JSON字符串,接下來,我們就來一起看看如何遍歷JSON字符串。
1 #include2 #include 3 #include "cjson/cJSON.h" 4 5 void parse_json(cJSON *json) 6 { 7 if(json->type == cJSON_Object) // 如果json對象 8 { 9 cJSON *child = NULL; 10 cJSON_ArrayForEach(child, json) 11 { 12 printf("%s\n",child->string); // 輸出鍵 13 parse_json(child->child); // 遞歸遍歷值 14 } 15 } 16 if(json->type == cJSON_Array) // 如果json數(shù)組 17 { 18 cJSON *child = NULL; 19 cJSON_ArrayForEach(child, json) 20 { 21 parse_json(child); // 遞歸遍歷數(shù)組中的元素 22 } 23 } 24 if(json->type == cJSON_String) // 如果json字符串 25 { 26 printf("%s\n",json->valuestring); // 輸出字符串 27 } 28 if(json->type == cJSON_Number) // 如果json數(shù)字 29 { 30 printf("%d\n",json->valueint); // 輸出整形數(shù) 31 } 32 } 33 34 int main() 35 { 36 char *json_string = "{\"name\":\"Lily\",\"age\":22,\"hobby\":[\"swimming\",\"reading\"]}"; 37 cJSON *json = cJSON_Parse(json_string); // 解析JSON字符串 38 if(json == NULL) return 1; 39 parse_json(json); // 遍歷JSON數(shù)據(jù) 40 cJSON_Delete(json); // 釋放內存 41 return 0; 42 }
如上代碼演示了如何用C語言操作JSON數(shù)據(jù),我們通過cJSON庫解析JSON字符串,在解析后,我們需要自己編寫遍歷JSON數(shù)據(jù)的函數(shù)。parse_json函數(shù)中首先判斷JSON數(shù)據(jù)的類型,如果是JSON對象,遍歷JSON對象,遞歸遍歷對象中的值;同樣,如果是JSON數(shù)組,遍歷數(shù)組中的元素,在遍歷數(shù)組時同樣需要遞歸遍歷元素,而如果是JSON字符串或數(shù)字,直接輸出即可。