c語言是一門廣泛應(yīng)用于系統(tǒng)編程和嵌入式設(shè)備的編程語言,它的特點是強大的操作系統(tǒng)操控能力,對網(wǎng)絡(luò)協(xié)議和數(shù)據(jù)處理的支持也直接稱為網(wǎng)絡(luò)編程
而json是輕量級的數(shù)據(jù)交換格式,易于人閱讀和編寫,也易于機器解析和生成,json數(shù)組是json數(shù)據(jù)的一種表示方式,通常由一組由逗號分隔的值構(gòu)成,用方括號括起來
在c語言中,我們需要借助第三方庫來對json數(shù)據(jù)進行解析,常用的有cJSON和Jansson等。這里以cJSON為例,介紹如何反解析json數(shù)組。
#include "cJSON.h"
int main() {
char *json_string = "[{\"name\":\"Tom\",\"age\":25},{\"name\":\"Jerry\",\"age\":20}]";
cJSON *root = cJSON_Parse(json_string);
if (root == NULL) {
printf("json parse error\n");
return -1;
}
if (cJSON_IsArray(root)) {
int size = cJSON_GetArraySize(root);
for (int i = 0; i< size; i++) {
cJSON *subItem = cJSON_GetArrayItem(root, i);
cJSON *nameItem = cJSON_GetObjectItem(subItem, "name");
cJSON *ageItem = cJSON_GetObjectItem(subItem, "age");
char *name = cJSON_Print(nameItem);
int age = cJSON_GetNumberValue(ageItem);
printf("name:%s, age:%d\n", name, age);
cJSON_free(name);
}
}
cJSON_Delete(root);
return 0;
}
在這段代碼中,我們首先引入了cJSON庫,然后聲明了一個json數(shù)據(jù)字符串作為例子。接著使用cJSON_Parse()函數(shù)對json數(shù)據(jù)進行解析,它會將json數(shù)據(jù)解析成一個cJSON的結(jié)構(gòu)體,如果解析失敗,返回NULL指針。
接下來,我們判斷解析出來的json數(shù)據(jù)是否是一個數(shù)組類型。如果是數(shù)組類型,我們使用cJSON_GetArraySize()函數(shù)獲取數(shù)組的大小,然后用循環(huán)遍歷數(shù)組中的每一個元素。獲取每個元素的“name”和“age”屬性值,并打印輸出。
要注意一個細節(jié),取出來的“name”屬性是帶有引號的,需要使用cJSON_Print()函數(shù)進行格式化輸出,同時釋放內(nèi)存。
最后,我們使用cJSON_Delete()函數(shù)釋放解析出來的json數(shù)據(jù)內(nèi)存。