C 語言在讀取嵌套的 JSON 數(shù)據(jù)時,可以借助一些第三方庫,如 cJSON。這個庫可以方便地將 JSON 字符串轉(zhuǎn)換為 C 語言中的數(shù)據(jù)結(jié)構(gòu),同時也支持嵌套的 JSON 數(shù)據(jù)。下面展示了一個簡單的示例代碼來讀取嵌套的 JSON 數(shù)據(jù)。
#include <stdio.h> #include <cjson/cJSON.h> int main() { char* json_string = "{ \"name\": \"Tom\", \"age\": 18, \"address\": {\"city\": \"Beijing\", \"street\": \"Nanluoguxiang\"} }"; cJSON* json = cJSON_Parse(json_string); if (!json) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return 1; } cJSON* name = cJSON_GetObjectItem(json, "name"); if (name && cJSON_IsString(name)) { printf("name: %s\n", name->valuestring); } cJSON* age = cJSON_GetObjectItem(json, "age"); if (age && cJSON_IsNumber(age)) { printf("age: %d\n", age->valueint); } cJSON* address = cJSON_GetObjectItem(json, "address"); if (address && cJSON_IsObject(address)) { cJSON* city = cJSON_GetObjectItem(address, "city"); cJSON* street = cJSON_GetObjectItem(address, "street"); if (city && street && cJSON_IsString(city) && cJSON_IsString(street)) { printf("address: %s %s\n", city->valuestring, street->valuestring); } } cJSON_Delete(json); return 0; }
在這個示例代碼中,我們首先定義了一個 JSON 字符串,里面包含了一個嵌套的 JSON 數(shù)據(jù)。然后使用 cJSON_Parse 函數(shù)將其解析為一個 cJSON 對象,接著通過 cJSON_GetObjectItem 函數(shù)可以獲取到該對象中的各個屬性值。需要注意的是,在獲取嵌套的 JSON 數(shù)據(jù)時,我們可以先獲取到外層的對象,然后再逐層獲取內(nèi)層的對象。最后使用 cJSON_Delete 函數(shù)來釋放 cJSON 對象。