欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c 如何取json嵌套數據

錢浩然2年前8瀏覽0評論

在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 數據時需要逐級獲取,如果中間某一層數據類型錯誤或者不存在,都會導致程序崩潰。因此我們需要對每一層數據進行類型判斷,以保證程序的穩定性。