在使用C語言解析多層嵌套的JSON時,可以采用一些常見的庫,例如json-c和cJSON。本文主要介紹如何使用json-c庫進行解析。
首先需要將JSON字符串解析成json_object對象,可以使用json_tokener_parse函數:
#include <json-c/json.h> json_object *root = json_tokener_parse(json_string);
然后可以通過json_object_get_xxx函數獲取JSON中的元素。例如,獲取一個名為"name"的字符串元素:
json_object *name_obj = json_object_object_get(root, "name"); const char *name_str = json_object_get_string(name_obj);
如果要獲取一個名為"items"的數組元素,則需要進行如下操作:
json_object *items_array = json_object_object_get(root, "items"); int n_items = json_object_array_length(items_array); for (int i = 0; i < n_items; i++) { json_object *item_obj = json_object_array_get_idx(items_array, i); // 對item_obj進行處理 }
如果JSON中存在多層嵌套,則需要進行遞歸處理。例如,如果JSON中存在一個名為"children"的數組元素,數組中的每個元素又包含一個名為"name"的字符串元素和一個名為"children"的子數組元素,則可以寫出如下代碼:
void process_child(json_object *child_obj) { json_object *name_obj = json_object_object_get(child_obj, "name"); const char *name_str = json_object_get_string(name_obj); printf("Name: %s\n", name_str); json_object *children_array = json_object_object_get(child_obj, "children"); int n_children = json_object_array_length(children_array); for (int i = 0; i < n_children; i++) { json_object *child_obj = json_object_array_get_idx(children_array, i); process_child(child_obj); } } json_object *children_array = json_object_object_get(root, "children"); int n_children = json_object_array_length(children_array); for (int i = 0; i < n_children; i++) { json_object *child_obj = json_object_array_get_idx(children_array, i); process_child(child_obj); }
以上代碼展示了如何遞歸處理嵌套的子元素。
綜上所述,使用json-c庫可以方便快捷地解析多層嵌套的JSON。開發中應該根據實際情況進行適當的封裝和錯誤處理,以提高程序的穩定性和可維護性。