在C語言中,我們經常需要讀取傳遞過來的 JSON 格式數據,但如果數據中存在嵌套結構的話就會比較麻煩。下面我們就來介紹一下如何從 JSON 數據中取出嵌套數據。
#include#include #include "cJSON.h" int main() { char *json_str = "{\"name\": \"John\", \"age\": 25, \"address\": {\"city\": \"New York\", \"state\": \"NY\", \"zip\": 10001}}"; cJSON *root = cJSON_Parse(json_str); if (root == NULL) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return 1; } cJSON *address = cJSON_GetObjectItemCaseSensitive(root, "address"); if (cJSON_IsObject(address)) { cJSON *city = cJSON_GetObjectItemCaseSensitive(address, "city"); if (cJSON_IsString(city) && (city->valuestring != NULL)) { printf("City: %s\n", city->valuestring); } cJSON *state = cJSON_GetObjectItemCaseSensitive(address, "state"); if (cJSON_IsString(state) && (state->valuestring != NULL)) { printf("State: %s\n", state->valuestring); } cJSON *zip = cJSON_GetObjectItemCaseSensitive(address, "zip"); if (cJSON_IsNumber(zip)) { printf("Zip code: %d\n", zip->valueint); } } cJSON_Delete(root); return 0; }
在上面的代碼中,我們使用了 CJSON 庫來解析 JSON 數據,并從中提取出 address 中的嵌套數據。首先我們使用cJSON_Parse
函數將 JSON 字符串轉換為 cJSON 對象,然后使用cJSON_GetObjectItemCaseSensitive
函數和對應的鍵名來取得 address 對象。
接著我們使用cJSON_GetObjectItemCaseSensitive
函數再次取得嵌套對象中的城市、州和郵編信息,并判斷其數據類型是否正確。最后打印出取到的數據即可。
需要注意的是,在訪問嵌套的 JSON 數據時需要逐級獲取,如果中間某一層數據類型錯誤或者不存在,都會導致程序崩潰。因此我們需要對每一層數據進行類型判斷,以保證程序的穩定性。
上一篇c 如何取json數據
下一篇c 如何處理返回json