JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,因其結(jié)構(gòu)簡(jiǎn)單、易讀易寫(xiě),被廣泛地應(yīng)用于前后端數(shù)據(jù)的傳輸。其中,數(shù)組作為JSON數(shù)據(jù)結(jié)構(gòu)中非常常見(jiàn)的一種類型,有時(shí)我們需要將JSON字符串轉(zhuǎn)換成數(shù)組,進(jìn)行數(shù)據(jù)處理。下面我們就來(lái)介紹一下C語(yǔ)言中如何將JSON字符串轉(zhuǎn)換成數(shù)組。
#include#include #include #include int main() { char *json_str = "[1,2,3,4,5]"; json_object *jarray = json_tokener_parse(json_str); enum json_type type = json_object_get_type(jarray); if (type == json_type_array) { int arraylen = json_object_array_length(jarray); int *array = malloc(sizeof(int) * arraylen); for (int i = 0; i< arraylen; i++) { json_object *jvalue = json_object_array_get_idx(jarray, i); if (json_object_is_type(jvalue, json_type_int)) { array[i] = json_object_get_int(jvalue); } else { printf("Invalid type in JSON array\n"); free(array); json_object_put(jarray); return -1; } } for (int i = 0; i< arraylen; i++) { printf("%d ", array[i]); } printf("\n"); free(array); } else { printf("Invalid JSON string\n"); json_object_put(jarray); return -1; } json_object_put(jarray); return 0; }
首先,我們將需要轉(zhuǎn)換的JSON字符串賦值給json_str,接著通過(guò)json_tokener_parse函數(shù)將其解析成json_object類型的jarray對(duì)象。然后,我們需要判斷jarray對(duì)象的類型是否為json_type_array,只有是數(shù)組類型才能進(jìn)行后續(xù)處理。如果判斷為數(shù)組類型,我們可以通過(guò)json_object_array_length函數(shù)獲取數(shù)組長(zhǎng)度,然后利用json_object_array_get_idx函數(shù)遍歷數(shù)組并逐一查詢每個(gè)元素的類型。如果元素類型為json_type_int,則將其轉(zhuǎn)換成int類型存入數(shù)組中。如果元素類型錯(cuò)誤,則表示JSON字符串存在問(wèn)題,需要退出程序。最后,我們可以輸出轉(zhuǎn)換后的數(shù)組。
總的來(lái)說(shuō),將JSON字符串轉(zhuǎn)換成數(shù)組的過(guò)程并不難,只需要使用json-c庫(kù)提供的API進(jìn)行解析和處理即可。但我們還需要注意,程序中需要充分考慮到異常情況,比如JSON字符串格式錯(cuò)誤或者數(shù)組元素類型不一致等問(wèn)題,防止意外情況影響程序的正常運(yùn)行。