在C語(yǔ)言中,經(jīng)常需要處理JSON格式的數(shù)據(jù)。通過(guò)遍歷JSON可以很容易地獲取到數(shù)據(jù)中的各個(gè)字段,但是在遍歷時(shí),有可能會(huì)遇到超出范圍的情況。
#include <stdio.h> #include <jansson.h> int main() { char *json_string = "{\"name\":\"小明\",\"age\":18}"; json_t *root; json_error_t error; root = json_loads(json_string, 0, &error); if (!root) { printf("JSON解析失敗:行 %d: %s\n", error.line, error.text); return 1; } json_t *age; age = json_object_get(root, "age"); for (size_t i = 0; i <= json_integer_value(age); i++) { printf("當(dāng)前年齡: %zu\n", i); } json_decref(root); return 0; }
在上面的代碼中,我們遍歷了JSON中的年齡字段,并將其從0開(kāi)始一直遍歷到該字段所表示的年齡。但是如果JSON中的年齡字段不小心被設(shè)置為了一個(gè)負(fù)數(shù),那么遍歷時(shí)就會(huì)發(fā)生超出范圍的錯(cuò)誤。
為了避免這種錯(cuò)誤,我們應(yīng)該在遍歷前先判斷該字段的值,避免超出范圍。
json_t *age; age = json_object_get(root, "age"); if (json_is_integer(age)) { for (size_t i = 0; i <= json_integer_value(age); i++) { printf("當(dāng)前年齡: %zu\n", i); } } else { printf("年齡字段不是一個(gè)合法的整數(shù)!\n"); }
在這段修改后的代碼中,我們先使用json_is_integer
函數(shù)來(lái)判斷該字段是否是一個(gè)合法的整數(shù),如果是,再進(jìn)行遍歷,否則直接輸出錯(cuò)誤信息。
因此,在使用C語(yǔ)言處理JSON數(shù)據(jù)時(shí),遍歷時(shí)一定要謹(jǐn)慎,避免超出范圍的錯(cuò)誤的發(fā)生。