JSON是一種輕量級(jí)數(shù)據(jù)交換格式,由于其易讀性和易解析性,已經(jīng)被廣泛應(yīng)用于Web應(yīng)用程序中。C語言是一種廣泛使用的編程語言,在處理JSON數(shù)據(jù)中也有著很好的表現(xiàn)。
如果我們需要從JSON數(shù)組中提取數(shù)據(jù),那么我們就需要使用C語言的相關(guān)函數(shù)。在C語言中,我們可以使用第三方庫,如cJSON,也可以手動(dòng)解析JSON數(shù)據(jù)。下面是一個(gè)手動(dòng)解析JSON數(shù)據(jù)的例子:
char json[] = "[{\"name\":\"張三\",\"age\":18},{\"name\":\"李四\",\"age\":20}]"; //JSON數(shù)組字符串 char *p = json; while (*p) { if (*p=='{') //JSON對(duì)象開始 { char *q = p + 1; //q指向JSON對(duì)象的第一個(gè)鍵 while (*q && *q!='}') //該JSON對(duì)象未結(jié)束 { char key[20]; //鍵的名字 char value[20]; //鍵的值 int i = 0; while (*q!='"') //鍵的名字 { q ++; } q ++; while (*q!='"') { key[i++] = *q ++; } key[i] = '\0'; q ++; //跳過鍵-值分隔符 i = 0; while (*q!='"') //鍵的值 { value[i++] = *q ++; } value[i] = '\0'; q ++; //跳過值結(jié)尾的引號(hào) printf("%s:%s\n", key, value); if (*q==',') //該JSON對(duì)象未結(jié)束 { q ++; } } } p ++; }
上述代碼會(huì)輸出JSON數(shù)組中每個(gè)JSON對(duì)象的鍵值對(duì)。
對(duì)于JSON數(shù)組中的每個(gè)JSON對(duì)象,如果我們需要獲取其中某個(gè)鍵的值,可以使用下面的代碼:
char json[] = "[{\"name\":\"張三\",\"age\":18},{\"name\":\"李四\",\"age\":20}]"; //JSON數(shù)組字符串 char *p = json; while (*p) { if (*p=='{') //JSON對(duì)象開始 { char *q = p + 1; //q指向JSON對(duì)象的第一個(gè)鍵 while (*q && *q!='}') //該JSON對(duì)象未結(jié)束 { char key[20]; //鍵的名字 char value[20]; //鍵的值 int i = 0; while (*q!='"') //鍵的名字 { q ++; } q ++; while (*q!='"') { key[i++] = *q ++; } key[i] = '\0'; q ++; //跳過鍵-值分隔符 i = 0; while (*q!='"') //鍵的值 { value[i++] = *q ++; } value[i] = '\0'; q ++; //跳過值結(jié)尾的引號(hào) if (strcmp(key, "name")==0) //如果是我們需要的鍵 { printf("姓名:%s\n", value); } if (*q==',') //該JSON對(duì)象未結(jié)束 { q ++; } } } p ++; }
上述代碼會(huì)輸出JSON數(shù)組中每個(gè)JSON對(duì)象中鍵為name的值。