cjson是一個基于C語言實現的json解析庫,可以方便地解析json格式的數據。
當在json數組中包含另一個數組時,cjson提供了一種解析方式。假設有如下json數據:
{ "name": "Jack", "age": 25, "languages": [ "Chinese", "English", [ "French", "German", "Japanese" ] ] }
其中,languages字段是一個包含三個元素的數組。第一個和第二個元素是簡單的字符串,而第三個元素是一個包含三個元素的字符串數組。
通過cjson解析這個json數組的代碼如下:
#include <stdio.h> #include <cjson/cJSON.h> int main() { char *json_data = "{\"name\":\"Jack\",\"age\":25,\"languages\":[\"Chinese\",\"English\",[\"French\",\"German\",\"Japanese\"]]}"; cJSON *root = cJSON_Parse(json_data); cJSON *languages = cJSON_GetObjectItem(root, "languages"); int languages_size = cJSON_GetArraySize(languages); for (int i = 0; i < languages_size; i++) { cJSON *item = cJSON_GetArrayItem(languages, i); if (cJSON_IsString(item)) { printf("%s\n", item->valuestring); } else if (cJSON_IsArray(item)) { int item_size = cJSON_GetArraySize(item); for (int j = 0; j < item_size; j++) { cJSON *sub_item = cJSON_GetArrayItem(item, j); printf("%s\n", sub_item->valuestring); } } } cJSON_Delete(root); return 0; }
該代碼首先解析json數據,然后獲取languages字段對應的cJSON對象。通過cJSON_GetArraySize函數獲取languages數組的大小。遍歷數組中的每一個元素,如果是字符串,則直接輸出字符串;如果是數組,則再次遍歷其中的元素,輸出子元素的字符串。
上述代碼的輸出結果如下:
Chinese English French German Japanese
可以看到,該代碼成功地輸出了包含子數組的json數組的所有元素。