在使用C語言解析多層嵌套JSON時,我們一般會使用第三方庫,比如CJSON。這篇文章將通過一個示例來演示如何使用CJSON解析多層嵌套的JSON數據。
首先,我們需要安裝CJSON庫。可以從Github上下載源代碼,并執行make命令編譯庫。然后,我們就可以在自己的代碼中引用該庫。
#include <stdio.h> #include <cjson/cJSON.h> int main() { char *json_str = "{\"name\": \"Tom\", \"age\": 20, \"address\": {\"city\": \"Beijing\", \"zip\": 100000}}"; cJSON *root = cJSON_Parse(json_str); if (!root) { printf("parse error\n"); return -1; } cJSON *name = cJSON_GetObjectItem(root, "name"); cJSON *age = cJSON_GetObjectItem(root, "age"); cJSON *address = cJSON_GetObjectItem(root, "address"); cJSON *city = cJSON_GetObjectItem(address, "city"); cJSON *zip = cJSON_GetObjectItem(address, "zip"); printf("name: %s\n", name->valuestring); printf("age: %d\n", age->valueint); printf("address: %s, %d\n", city->valuestring, zip->valueint); cJSON_Delete(root); return 0; }
在這個示例中,我們定義了一個JSON字符串,其中包含了各種類型的數據,包括字符串、整數和嵌套的JSON對象。
我們首先調用cJSON_Parse函數來解析JSON字符串,如果解析失敗,則返回NULL。然后我們使用cJSON_GetObjectItem函數來獲取JSON對象中的具體元素,比如“name”、“age”和“address”。
注意,在獲取嵌套的JSON對象時,我們需要先獲取父對象,然后再獲取子對象。比如,我們需要獲取“address”對象時,先獲取“root”中的“address”元素,然后再從“address”對象中獲取“city”和“zip”元素。
最后,我們打印出各個元素的值,并調用cJSON_Delete函數來釋放內存。
通過這個示例,我們可以看到,使用CJSON庫可以很方便地解析多層嵌套的JSON數據。