C JSON解析庫可以幫助我們在C程序中方便地解析JSON格式的數據。當JSON數據中包含對象時,C JSON解析庫同樣可輕松處理。我們只需將JSON數據映射到C語言中的結構體,即可方便地使用其中的數據。
// JSON數據 { "person": { "name": "Jack", "age": 30, "hobby": { "first": "reading", "second": "swimming" } } } // C語言結構體 typedef struct { char name[10]; int age; struct { char first[20]; char second[20]; } hobby; } Person;
如上所示,JSON數據中包含person對象,而person對象又包含name、age和hobby對象。在C語言中,我們定義了一個Person結構體來映射person對象,其中hobby對象也是一個結構體,包含first和second兩個元素。我們只需使用C JSON解析庫中的相應函數,即可將JSON數據解析到Person結構體中:
// 創建JSON對象 json_t* root = json_loads(json_str, 0, NULL); // 解析person對象 json_t* person_obj = json_object_get(root, "person"); // 解析name元素 json_t* name_obj = json_object_get(person_obj, "name"); const char* name_str = json_string_value(name_obj); // 解析age元素 json_t* age_obj = json_object_get(person_obj, "age"); int age_int = json_integer_value(age_obj); // 解析hobby對象 json_t* hobby_obj = json_object_get(person_obj, "hobby"); // 解析first元素 json_t* first_obj = json_object_get(hobby_obj, "first"); const char* first_str = json_string_value(first_obj); // 解析second元素 json_t* second_obj = json_object_get(hobby_obj, "second"); const char* second_str = json_string_value(second_obj); // 將解析結果賦值到Person結構體 Person person; strcpy(person.name, name_str); person.age = age_int; strcpy(person.hobby.first, first_str); strcpy(person.hobby.second, second_str);
如代碼所示,我們先通過json_loads函數創建一個JSON對象root,然后使用json_object_get函數解析出person對象、name元素、age元素和hobby對象。接著,我們使用json_string_value和json_integer_value函數將元素的值轉換為相應的C語言類型,并將這些值賦給Person結構體。
總而言之,當JSON數據中包含對象時,我們只需將JSON數據映射到C語言中的結構體,然后使用C JSON解析庫中相應的函數,即可方便地解析其中的數據。