在C語言中,我們可以使用第三方庫如cJSON來輔助操作JSON字符串。
假設(shè)我們有一個JSON字符串?dāng)?shù)組如下:
{ "students": [ { "name": "Tom", "age": 20, "score": [90, 85, 95] }, { "name": "Jack", "age": 21, "score": [85, 80, 90] } ] }
遍歷數(shù)組需要用到循環(huán)結(jié)構(gòu)。我們先將JSON字符串解析成cJSON對象:
cJSON* root = cJSON_Parse(json_str); cJSON* students = cJSON_GetObjectItemCaseSensitive(root, "students"); for (int i = 0; i< cJSON_GetArraySize(students); i++) { cJSON* student = cJSON_GetArrayItem(students, i); ... }
這里我們使用了cJSON庫中的函數(shù)cJSON_Parse將JSON字符串解析成cJSON對象。然后使用cJSON_GetObjectItemCaseSensitive函數(shù)獲取到數(shù)組對象students。 接著使用cJSON_GetArraySize和cJSON_GetArrayItem函數(shù)分別獲取到數(shù)組大小和每個元素的對象。
接下來就可以在循環(huán)體中遍歷數(shù)組元素,我們可以使用cJSON_GetObjectItemCaseSensitive函數(shù)獲取元素的子對象,如下:
cJSON* name = cJSON_GetObjectItemCaseSensitive(student, "name"); cJSON* age = cJSON_GetObjectItemCaseSensitive(student, "age"); cJSON* score = cJSON_GetObjectItemCaseSensitive(student, "score"); for (int j = 0; j< cJSON_GetArraySize(score); j++) { cJSON* score_item = cJSON_GetArrayItem(score, j); ... }
在遍歷數(shù)組元素中,我們同樣需要使用循環(huán)結(jié)構(gòu),通過函數(shù)cJSON_GetArrayItem依次獲取數(shù)組元素對象。 同時需要注意的是,如果數(shù)組中每個元素的結(jié)構(gòu)相同,可以將遍歷數(shù)組的循環(huán)體封裝成函數(shù)以便代碼復(fù)用。
最后別忘了在用完cJSON對象后釋放它們的內(nèi)存:
cJSON_Delete(root);
以上就是在C語言中遍歷JSON字符串?dāng)?shù)組的方法,使用第三方庫如cJSON可以簡單快速地實現(xiàn)。希望對您有所幫助。