Json作為一種常用的數(shù)據(jù)傳輸格式,在大數(shù)據(jù)和互聯(lián)網(wǎng)應(yīng)用中得到了廣泛應(yīng)用和支持,對于C語言來說,可以利用第三方解析庫來實(shí)現(xiàn)解析Json數(shù)據(jù),其中多層嵌套Json的解析是很常見的一種情況,這里介紹一下如何使用 cJSON 解析多層嵌套的 Json 數(shù)據(jù)。
cJSON 是一個輕型的、可擴(kuò)展的C語言Json解析器,它可以很方便的將 Json 格式的數(shù)據(jù)轉(zhuǎn)化為 C語言中的數(shù)組和結(jié)構(gòu)體,方便C語言進(jìn)行數(shù)據(jù)處理和通信。下面是 cJSON 嵌套 Json 的解析示例代碼:
#include#include #include "cJSON.h" int main() { char *json_str = "{\"name\":\"xiaoming\",\"age\":18,\"scores\":[{\"course\":\"math\",\"score\":87},{\"course\":\"english\",\"score\":92}],\"address\":{\"province\":\"beijing\",\"city\":\"haidian\",\"street\":\"xueyuanlu\"}}"; cJSON *json = cJSON_Parse(json_str); if (json == NULL) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return 1; } cJSON *name = cJSON_GetObjectItem(json, "name"); cJSON *age = cJSON_GetObjectItem(json, "age"); cJSON *scores = cJSON_GetObjectItem(json, "scores"); cJSON *address = cJSON_GetObjectItem(json, "address"); printf("Name : %s\n", name->valuestring); printf("Age : %d\n", age->valueint); int scores_size = cJSON_GetArraySize(scores); for (int i = 0; i< scores_size; i++) { cJSON *score = cJSON_GetArrayItem(scores, i); cJSON *course = cJSON_GetObjectItem(score, "course"); cJSON *score_value = cJSON_GetObjectItem(score, "score"); printf("Course : %s, Score : %d\n", course->valuestring, score_value->valueint); } cJSON *province = cJSON_GetObjectItem(address, "province"); cJSON *city = cJSON_GetObjectItem(address, "city"); cJSON *street = cJSON_GetObjectItem(address, "street"); printf("Address : %s %s %s\n", province->valuestring, city->valuestring, street->valuestring); cJSON_Delete(json); return 0; }
在這個示例中,我們定義了一段多層嵌套的 Json 字符串,然后使用 cJSON_Parse 函數(shù)解析 Json 數(shù)據(jù),并依據(jù) Json 數(shù)據(jù)中的鍵值來獲取對應(yīng)的值。代碼中使用了 cJSON_GetObjectItem 和 cJSON_GetArrayItem 兩個函數(shù)來解析嵌套數(shù)據(jù),這兩個函數(shù)的參數(shù)分別為一個 cJSON 對象和一個字符串類型的鍵值,返回對應(yīng)的 cJSON 對象或數(shù)組項。
總之,利用 cJSON 解析 Json 數(shù)據(jù)是一個簡單又實(shí)用的方法,對于C語言開發(fā)有很大的幫助,這里只是簡單的介紹了嵌套數(shù)據(jù)的解析方法,具體應(yīng)用還需要結(jié)合實(shí)際情況進(jìn)行處理。