C語言中有一個開源庫叫做 cJSON,它可以幫助我們處理 JSON 數據。但是有些時候,我們會遇到一些復雜的 JSON 數據,需要通過一些技巧來轉換。下面我將通過一個示例來說明如何轉換復雜的 JSON 數據。
{ "id": 1, "name": "John", "age": 30, "address": { "street": "New street", "city": "New York" }, "hobbies": [ { "name": "reading", "level": "high" }, { "name": "playing chess", "level": "medium" } ] }
示例中的 JSON 數據包含了嵌套對象和數組,它們的取值方式有些不同。下面是一個簡單的處理方法:
// 創建一個 cJSON 對象 cJSON* root = cJSON_Parse(json_str); // 獲取 id 的值 cJSON *id_obj = cJSON_GetObjectItem(root, "id"); int id_val = id_obj->valueint; // 獲取 address 對象中的 city 的值 cJSON *address_obj = cJSON_GetObjectItem(root, "address"); cJSON *city_obj = cJSON_GetObjectItem(address_obj, "city"); char* city_val = city_obj->valuestring; // 獲取 hobbies 數組中第二個元素中的 level 的值 cJSON *hobbies_obj = cJSON_GetObjectItem(root, "hobbies"); cJSON *hobby_obj = cJSON_GetArrayItem(hobbies_obj, 1); cJSON *level_obj = cJSON_GetObjectItem(hobby_obj, "level"); char* level_val = level_obj->valuestring;
通過以上步驟,我們就可以方便地獲取到 JSON 數據中的各種值。這里需要特別注意的是,當獲取數組元素時,需要使用 cJSON_GetArrayItem() 方法,而不是 cJSON_GetObjectItem() 方法。
當然,對于更加復雜的 JSON 數據,我們可能需要使用更加復雜的技巧來處理。但是熟練掌握 cJSON 庫的基本用法可以為我們在處理 JSON 數據時帶來很大的便利。