色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c 如何取json嵌套數(shù)據(jù)

在C語(yǔ)言中,我們經(jīng)常需要讀取傳遞過(guò)來(lái)的 JSON 格式數(shù)據(jù),但如果數(shù)據(jù)中存在嵌套結(jié)構(gòu)的話就會(huì)比較麻煩。下面我們就來(lái)介紹一下如何從 JSON 數(shù)據(jù)中取出嵌套數(shù)據(jù)。

#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 庫(kù)來(lái)解析 JSON 數(shù)據(jù),并從中提取出 address 中的嵌套數(shù)據(jù)。首先我們使用cJSON_Parse函數(shù)將 JSON 字符串轉(zhuǎn)換為 cJSON 對(duì)象,然后使用cJSON_GetObjectItemCaseSensitive函數(shù)和對(duì)應(yīng)的鍵名來(lái)取得 address 對(duì)象。

接著我們使用cJSON_GetObjectItemCaseSensitive函數(shù)再次取得嵌套對(duì)象中的城市、州和郵編信息,并判斷其數(shù)據(jù)類(lèi)型是否正確。最后打印出取到的數(shù)據(jù)即可。

需要注意的是,在訪問(wèn)嵌套的 JSON 數(shù)據(jù)時(shí)需要逐級(jí)獲取,如果中間某一層數(shù)據(jù)類(lèi)型錯(cuò)誤或者不存在,都會(huì)導(dǎo)致程序崩潰。因此我們需要對(duì)每一層數(shù)據(jù)進(jìn)行類(lèi)型判斷,以保證程序的穩(wěn)定性。