C JSON是一種輕量級的數據交換格式,由于其簡單易用和高效性,被廣泛應用于互聯網應用和數據傳輸領域。而在C語言中,我們可以通過使用第三方庫,如jansson、cJSON等,來處理JSON數據。
在C中,我們通常需要對JSON數據進行反序列化,即將JSON格式的字符串轉換為C語言中的數據結構。對于簡單的JSON數據,反序列化并不復雜,但當數據中存在嵌套的情況時,我們就需要使用嵌套的結構體來處理。
我們以一個嵌套的JSON數據為例:
{ "name": "Tom", "age": 30, "address": { "street": "123 Main St", "city": "Anytown", "state": "CA", "zip": 12345 }, "phone": { "home": "111-111-1111", "work": "222-222-2222" } }
對于嵌套的JSON數據,我們需要使用嵌套的結構體存儲數據,如下所示:
typedef struct { char *name; int age; struct { char *street; char *city; char *state; int zip; } address; struct { char *home; char *work; } phone; } person;
在解析JSON數據時,我們需要使用逐層嵌套的方式,先解析最外層的字段,再逐層解析內部的結構體字段。具體代碼實現如下:
cJSON *root = cJSON_Parse(json_string); if (root == NULL) { // 解析錯誤處理 } person p; cJSON *name = cJSON_GetObjectItem(root, "name"); p.name = strdup(name->valuestring); cJSON *age = cJSON_GetObjectItem(root, "age"); p.age = age->valueint; cJSON *address = cJSON_GetObjectItem(root, "address"); cJSON *street = cJSON_GetObjectItem(address, "street"); p.address.street = strdup(street->valuestring); cJSON *city = cJSON_GetObjectItem(address, "city"); p.address.city = strdup(city->valuestring); cJSON *state = cJSON_GetObjectItem(address, "state"); p.address.state = strdup(state->valuestring); cJSON *zip = cJSON_GetObjectItem(address, "zip"); p.address.zip = zip->valueint; cJSON *phone = cJSON_GetObjectItem(root, "phone"); cJSON *home = cJSON_GetObjectItem(phone, "home"); p.phone.home = strdup(home->valuestring); cJSON *work = cJSON_GetObjectItem(phone, "work"); p.phone.work = strdup(work->valuestring); cJSON_Delete(root);
在解析完成后,我們需要根據需要手動釋放結構體中申請的內存。
總之,嵌套的JSON數據需要使用嵌套的結構體來存儲和解析,逐層處理每個字段,即可完成反序列化操作。
上一篇go 語言解析json
下一篇python 控制臺音樂