在開發中,我們常常要處理復雜的 JSON 數據格式。在 C 語言中,我們可以使用一些庫來將 JSON 數據轉換成對象。
其中,最常用的庫是 cJSON。cJSON 是一個輕量級的 C 語言 JSON 解析器,能夠將 JSON 文本快速地轉換成 C 對象,并且可以很容易地訪問和更新這些對象。下面是使用 cJSON 將 JSON 數據轉換成對象的代碼示例。
#include <stdio.h> #include <cJSON.h> int main() { char *json_str = "{\"name\":\"tom\", \"age\":18, \"address\":{\"province\":\"guangdong\",\"city\":\"shenzhen\"}}"; cJSON *root = cJSON_Parse(json_str); if (root == NULL) { printf("Parse json failed.\n"); return -1; } cJSON *name_node = cJSON_GetObjectItem(root, "name"); if (name_node != NULL) { printf("name:%s\n", name_node->valuestring); } cJSON *age_node = cJSON_GetObjectItem(root, "age"); if (age_node != NULL) { printf("age:%d\n", age_node->valueint); } cJSON *address_node = cJSON_GetObjectItem(root, "address"); if (address_node != NULL && cJSON_IsObject(address_node)) { cJSON *province_node = cJSON_GetObjectItem(address_node, "province"); cJSON *city_node = cJSON_GetObjectItem(address_node, "city"); if (province_node != NULL && city_node != NULL) { printf("province:%s, city:%s\n", province_node->valuestring, city_node->valuestring); } } cJSON_Delete(root); return 0; }
在這個示例中,我們首先定義了一個 JSON 字符串,然后使用 cJSON_Parse 函數將其解析成一個 cJSON 對象。接下來,我們使用 cJSON_GetObjectItem 函數獲取 JSON 對象中的節點,并打印出對應的值。
需要注意的是,在使用 cJSON_GetObjectItem 函數獲取節點時,我們需要判斷節點是否存在以及節點的類型是不是我們所期望的類型。否則,如果節點不存在或類型不符,會導致程序崩潰。
最后,我們使用 cJSON_Delete 函數釋放 cJSON 對象所占用的內存。
下一篇c 復雜json 轉