JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,常用于Web應(yīng)用程序中傳輸數(shù)據(jù)。在實際開發(fā)過程中,經(jīng)常會遇到多層嵌套的JSON數(shù)據(jù),如何解析這種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)呢?下面,我們來介紹一下使用C語言解析多層JSON字符串的方法。
首先,我們需要使用一個C庫來處理JSON數(shù)據(jù)。目前最流行的C JSON庫是cJSON,它不僅易于使用,還性能良好。
// 引入cJSON庫 #include "cJSON.h" // 定義JSON數(shù)據(jù) const char * jsonStr = "{ \"name\":\"小明\", \"age\":20, \"friends\":[{\"name\":\"小紅\",\"age\":19}, {\"name\":\"小李\",\"age\":20}] }"; // 解析JSON數(shù)據(jù) cJSON * root = cJSON_Parse(jsonStr);
接下來,我們可以通過cJSON庫提供的函數(shù),遍歷并讀取JSON數(shù)據(jù)。例如,要讀取上述JSON字符串中小明的姓名,可以使用以下代碼:
// 讀取name字段 cJSON * name = cJSON_GetObjectItem(root, "name"); // 轉(zhuǎn)成字符串 char * nameStr = cJSON_Print(name); printf("name: %s\n", nameStr); // 輸出:name: "小明"
如果要讀取friends字段中的每個朋友的姓名和年齡,可以使用循環(huán)遍歷。例如:
// 讀取friends數(shù)組 cJSON * friends = cJSON_GetObjectItem(root, "friends"); // 獲取數(shù)組長度 int len = cJSON_GetArraySize(friends); for (int i = 0; i< len; i++) { // 獲取數(shù)組元素 cJSON * friend = cJSON_GetArrayItem(friends, i); // 讀取name和age字段 cJSON * name = cJSON_GetObjectItem(friend, "name"); cJSON * age = cJSON_GetObjectItem(friend, "age"); // 轉(zhuǎn)成字符串 char * nameStr = cJSON_Print(name); char * ageStr = cJSON_Print(age); printf("friend%d: %s, %s\n", i+1, nameStr, ageStr); } // 輸出:friend1: "小紅", "19",friend2: "小李", "20"
以上就是使用C語言解析多層JSON字符串的方法。需要注意的是,在讀取完JSON數(shù)據(jù)后,需要使用cJSON庫提供的函數(shù)釋放內(nèi)存。