在開發中,我們經常需要獲取json數據的指定行的值。在C語言中,我們可以使用第三方庫cJSON來解析json數據。
首先我們需要導入cJSON庫,在代碼中引用頭文件:
#include "cJSON.h"
接著,我們定義一個cJSON對象,用來存儲json數據:
cJSON *json;
然后,我們讀取json文件,將數據存儲在json對象中:
char *filename = "data.json"; // json文件名
FILE *fp = fopen(filename, "rb");
if (fp == NULL) {
printf("failed to open %s\n", filename);
return;
}
fseek(fp, 0, SEEK_END);
long len = ftell(fp);
fseek(fp, 0, SEEK_SET);
char *data = (char *)malloc(len + 1);
fread(data, 1, len, fp);
fclose(fp);
data[len] = '\0';
json = cJSON_Parse(data);
free(data);
if (!json) {
printf("Error before: [%s]\n", cJSON_GetErrorPtr());
return;
}
接下來,我們可以通過cJSON對象來獲取json數據的指定行的值。假設我們要獲取json數據中"id"為1的"name"的值:
cJSON *entry = cJSON_GetObjectItemCaseSensitive(json, "entries");
if (cJSON_IsArray(entry)) {
cJSON *item = NULL;
cJSON_ArrayForEach(item, entry) {
cJSON *id = cJSON_GetObjectItemCaseSensitive(item, "id");
if (cJSON_IsNumber(id) && (id->valueint == 1)) {
cJSON *name = cJSON_GetObjectItemCaseSensitive(item, "name");
if (cJSON_IsString(name) && (name->valuestring != NULL)) {
printf("%s\n", name->valuestring);
break;
}
}
}
}
上述代碼會遍歷json數據中的每一個元素,判斷其"id"是否為1,如果是則獲取其"name"的值并輸出。
使用cJSON庫可以方便地處理json數據,通過上述方法也可以輕松獲取指定行的值。
上一篇c 獲取json元素數量
下一篇c 獲取json串某個值