C語言中解析JSON數(shù)據(jù)是一項(xiàng)非常重要的技能。在本文中,我們將介紹兩種基本的方法用來解析兩層JSON數(shù)據(jù)。
方法1:使用 cJSON 庫
cJSON *json = cJSON_Parse(s); //s為待解析的JSON數(shù)據(jù) if(!json){ printf("Error before: [%s]\n", cJSON_GetErrorPtr()); }else{ cJSON *data = cJSON_GetObjectItemCaseSensitive(json, "data"); if(cJSON_IsArray(data)){ cJSON_ArrayForEach(item, data){ cJSON *id = cJSON_GetObjectItemCaseSensitive(item, "id"); cJSON *name = cJSON_GetObjectItemCaseSensitive(item, "name"); printf("id: %d, name: %s\n", id->valueint, name->valuestring); } } cJSON_Delete(json); }
在上述代碼中,我們使用 cJSON 庫來解析 JSON 數(shù)據(jù)。首先,我們將 JSON 數(shù)據(jù)字符串傳遞給 cJSON_Parse 函數(shù),并檢查是否解析成功。接下來,我們使用 cJSON_GetObjectItemCaseSensitive 函數(shù)找到 "data" 對(duì)象的值,并使用 cJSON_IsArray 函數(shù)判斷其是否為一個(gè)數(shù)組類型。如果是,則使用 cJSON_ArrayForEach 函數(shù)遍歷數(shù)組中的每一個(gè)元素,然后再次使用 cJSON_GetObjectItemCaseSensitive 函數(shù)找到該元素的 "id" 和 "name" 值,并將它們輸出到控制臺(tái)上。
方法2:使用 jsmn 庫
int r; jsmn_parser p; jsmntok_t t[128]; // t 為解析后的 JSON 令牌 jsmn_init(&p); r = jsmn_parse(&p, s, strlen(s), t, sizeof(t)/sizeof(t[0])); //s為待解析的JSON數(shù)據(jù) if(r< 0){ printf("Failed to parse JSON: %d\n", r); }else{ int i; int size = r; for(i=1; i上述代碼展示了使用 jsmn 庫解析 JSON 數(shù)據(jù)的方法。首先,我們需要定義一個(gè) jsmn_parser 對(duì)象和一個(gè) jsmntok_t 對(duì)象數(shù)組,用來存放解析后的 JSON 令牌。接下來,我們通過調(diào)用 jsmn_parse 函數(shù)來對(duì) JSON 數(shù)據(jù)進(jìn)行解析,并檢查解析結(jié)果是否正確。如果一切順利,我們可以使用遍歷令牌的方式來獲取 JSON 數(shù)據(jù)的值,并輸出到控制臺(tái)上。在本方法中,我們通過判斷令牌的類型和值的內(nèi)容來定位需要的 "data" 數(shù)組,并通過遍歷令牌來獲取數(shù)組元素中的值。